如何从gridview中用程序创建的文本框中获取和保存值

本文关键字:获取 文本 保存 创建 gridview 程序 | 更新日期: 2023-09-27 18:29:23

我有gridview,它包含在后面的代码中创建的文本框

这是页面加载:

protected void Page_Load(object sender, EventArgs e)
{
    //my page load is empty;
}

这是按钮的代码,选择下拉菜单,然后单击"Pilih"显示包含文本框的网格视图:

public void btnPilihKrit_Click(object sender, EventArgs e)
{
    DataTable dtsubKrit = new DataTable();
    dtsubKrit = subkritMgr.getListSubKriteriaByIDKriteria(int.Parse(ddlKrit.SelectedValue));
    NbDtSubKritRow = dtsubKrit.Rows.Count;
    dtGvSubKrit.Columns.Add(new DataColumn("SUBKRITERIA", typeof(string)));
    foreach (DataRow row in dtsubKrit.Rows)
    {
        dtGvSubKrit.Columns.Add(new DataColumn(row["SUBKRITERIA"].ToString(), typeof(string)));
    }
    DataRow dr = null;
    foreach (DataRow row in dtsubKrit.Rows)
    {
        dr = dtGvSubKrit.NewRow();
        dr["SUBKRITERIA"] = row["SUBKRITERIA"];
        dtGvSubKrit.Rows.Add(dr);
    }

    gvKrit2.DataSource = dtGvSubKrit;
    gvKrit2.DataBind();
    ViewState["CurrentTable"] = dtGvSubKrit;
}

这是gridview的rowdatabound:中的代码

protected void gvKrit2_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        for (int i = 1; i <= NbDtSubKritRow; i++)
        {
            TextBox txtNilai = new TextBox();
            txtNilai.ID = "txtNilai" + e.Row.RowIndex.ToString() + i.ToString();
            if (i == e.Row.RowIndex + 1)
            {
                txtNilai.Text = "1";
            }
            else
            {
                txtNilai.Text = "";
            }
            if (i <= e.Row.RowIndex + 1)
            {
                txtNilai.Enabled = false;
            }
            e.Row.Cells[i].Controls.Add(txtNilai);
        }
    }
}

那么这是从网格视图中的文本框中获取值的代码:

protected void btnProsesPerbBerpsg_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in gvKrit2.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            TextBox textBox = row.FindControl("txtNilai") as TextBox;
            string tb = textBox.Text;
            // do somthing with the text box textBox
        }
    }
}

这里有一些例子:

  1. 屏幕截图1,点击按钮Pilih并选择下拉菜单后,将显示带有文本框的网格视图,我将用自己的值填充文本框
  2. 屏幕截图2,点击"Proses Perbandingan Berpasangan"按钮从网格视图中获取值

有人能帮我吗?

我已经尝试了很多类似的方法

TextBox box1 = (TextBox)(gvKrit2.Rows[rowIndex].Cells[1].FindControl("txtNilai")) as TextBox;

但在findcontrol中找不到文本框。似乎gridview在返回后没有再次创建。

我已经搜索了一些文献,我必须重新创建gridview或在gridview中创建rowcreated事件,但现在我不知道该怎么做。

如何从gridview中用程序创建的文本框中获取和保存值

当您在RowDataBound上创建ID为的文本框时

 txtNilai.ID = "txtNilai" + e.Row.RowIndex.ToString() + i.ToString();

所以你需要找到ID:

string txtid = "txtNilai"+e.Row.RowIndex.ToString()+i.ToString(); // as per given inRowdataBound , so make sure to define i value.
TextBox textBox = row.FindControl(txtid) as TextBox;