[英]Dynamic Controls gets lost durig Postback inside GridView in asp.net C#
我面临一个非常常见的问题,我尝试了几乎所有解决方案,但没有一个解决了我的问题。 我创建了一个网格视图,我希望它具有动态列。 其中四列必须有一些控件(文本框、标签和复选框),所以我将它创建为模板字段(下面的代码)
TemplateField tf4 = new TemplateField();
tf4.HeaderText = "Sr.No";
CustomerBillingGrid.Columns.Add(tf4);
TemplateField tf1 = new TemplateField();
tf1.HeaderText = "Select";
CustomerBillingGrid.Columns.Add(tf1);
TemplateField tf2 = new TemplateField();
tf2.HeaderText = "Misc";
CustomerBillingGrid.Columns.Add(tf2);
TemplateField tf3 = new TemplateField();
tf3.HeaderText = "Total";
CustomerBillingGrid.Columns.Add(tf3);
然后我创建了显示数据库查询结果的绑定字段(下面的代码)
if (ds.Tables[0].Rows.Count > 0)
{
int num = 2;
foreach (DataColumn col in ds.Tables[0].Columns)
{
BoundField bf = new BoundField();
bf.HeaderText = col.ColumnName;
bf.DataField = col.ColumnName;
CustomerBillingGrid.Columns.Insert(num, bf);
num++;
}
CustomerBillingGrid.DataSource = ds;
CustomerBillingGrid.DataBind();
}
之后,我为 GridView 动态生成了控件。
protected void GenrateDynamicControls()
{
Label lblSNo = new Label();
lblSNo.ID = "lblSNo";
lblSNo.Text = "1";
Page.Form.Controls.Add(lblSNo);
CheckBox chkSelect = new CheckBox();
chkSelect.ID = "chkSelect";
chkSelect.AutoPostBack = true;
Page.Form.Controls.Add(chkSelect);
TextBox txtMisc = new TextBox();
txtMisc.ID = "txtMisc";
Page.Form.Controls.Add(txtMisc);
TextBox txtTotal = new TextBox();
txtTotal.ID = "txtTotal";
Page.Form.Controls.Add(txtTotal);
}
我在每次回发时都调用了这个方法
if (!IsPostBack)
{
if (!Convert.ToBoolean(ViewState["DynamicControlsGenrated"]))
{
GenrateDynamicControls();
}
}
我面临的问题是所有这些动态控件在每次回发时都会丢失,第二个问题是如何在 GridView 中添加这些动态生成的控件并保持其持久性。
谢谢,
在网格视图内创建动态控件的情况下,您需要在每次回发时重新创建控件,并确保在网格视图中禁用视图状态模式。
ViewStateMode="Disabled"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.