C# 如何从gridview中以编程方式创建的文本框中获取和保存值?
我有C# 如何从gridview中以编程方式创建的文本框中获取和保存值?,c#,asp.net,gridview,textbox,postback,C#,Asp.net,Gridview,Textbox,Postback,我有gridview,它包含在代码隐藏中创建的文本框 这是页面加载: protected void Page_Load(object sender, EventArgs e) { //my page load is empty; } 以下是选择下拉菜单后按钮的代码,然后单击“Pilih”以显示包含文本框的gridview: public void btnPilihKrit_Click(object sender, EventArgs e) { DataTable dtsubKr
gridview
,它包含在代码隐藏中创建的文本框
这是页面加载:
protected void Page_Load(object sender, EventArgs e)
{
//my page load is empty;
}
以下是选择下拉菜单后按钮的代码,然后单击“Pilih”以显示包含文本框的gridview:
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);
}
}
}
这里有一些例子:
TextBox box1 = (TextBox)(gvKrit2.Rows[rowIndex].Cells[1].FindControl("txtNilai")) as TextBox;
但是在findcontrol
中找不到文本框。似乎在回发时未再次创建gridview
我搜索了一些文献,我必须重新创建
gridview
,或者在gridview
中创建rowcreated事件,但现在我没有任何想法来这样做。当您在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;
在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;
为什么不使用
javascript
来收集值呢?我不擅长javascript,但现在我用不同的方法解决了我的问题。我不再使用gridview,只是简单地制作表格,然后用文本框填充表格。它不受回邮的影响。泰里玛·卡西·帕克(Terima Kasih Pak):)这是一个很好的解决方案,可以帮助我们在欧美、波斯等地实现这一目标。顺便说一句,如果你已经解决了你的问题,请将它添加到答案中,这样任何像你这样有问题的人都可以找到它。:)哦,好的,谢谢你,帕克。saya sudah lama浏览2堆栈溢出tapi baru sekarang注册以获取更多信息。丹·萨亚(dalam hitungan hari sudah mendapat saran atau balasan)说,你为什么不使用javascript
来收集值?我不擅长javascript,但现在我用不同的方法解决了我的问题。我不再使用gridview,只是简单地制作表格,然后用文本框填充表格。它不受回邮的影响。泰里玛·卡西·帕克(Terima Kasih Pak):)这是一个很好的解决方案,可以帮助我们在欧美、波斯等地实现这一目标。顺便说一句,如果你已经解决了你的问题,请将它添加到答案中,这样任何像你这样有问题的人都可以找到它。:)哦,好的,谢谢你,帕克。saya sudah lama浏览2堆栈溢出tapi baru sekarang注册以获取更多信息。但我不想告诉大家,这是一个非常重要的问题,谢谢你们的回答。忘了我在txtNilaioh ya后面添加了索引,我只记得我的问题可能是由控件(文本框)引起的,该控件没有再次创建bcoz的回发。但现在我用不同的方法解决了我的问题。我不再使用gridview,只是简单地制作表格,然后用文本框填充表格。它没有受到回帖的影响。谢谢你的回答。忘了我在txtNilaioh ya后面添加了索引,我只记得我的问题可能是由控件(文本框)引起的,该控件没有再次创建bcoz的回发。但现在我用不同的方法解决了我的问题。我不再使用gridview,只是简单地制作表格,然后用文本框填充表格。它不受回邮的影响。