[英]Dynamic generation of CheckBox in asp.net gridview does not maintain the state
aspx代碼
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="TestButton" runat="server" OnClick="TestButton_Click"
Text="AddNewRow" />
</div>
<div>
<asp:GridView ID="MyGrid" runat="server" GridLines="Both"
AutoGenerateColumns="false" OnDataBound="MyGrid_DataBound"
EnableViewState="true">
<Columns>
<asp:BoundField DataField="Name" HeaderText="name" />
<asp:TemplateField HeaderText="CheckBox1">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" EnableViewState="true"
runat="server" AutoPostBack="true" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="CheckBox2">
<ItemTemplate>
<asp:CheckBox ID="CheckBox2" runat="server"
EnableViewState="true" AutoPostBack="true" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="CheckBox3">
<ItemTemplate>
<asp:CheckBox ID="CheckBox3" runat="server"
AutoPostBack="true" EnableViewState="true" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
后面的代碼
public DataTable Dt = new DataTable();
protected void Page_Load(object sender, EventArgs e) { }
protected void TestButton_Click(object sender, EventArgs e)
{
DataRow dr = null;
if(ViewState["T"]==null)
{
Dt.Columns.Add(new DataColumn("Name", typeof(string)));
Dt.Columns.Add(new DataColumn("CheckBox1", typeof(bool)));
Dt.Columns.Add(new DataColumn("CheckBox2", typeof(bool)));
Dt.Columns.Add(new DataColumn("CheckBox3", typeof(bool)));
ViewState["T"] = Dt;
}
Dt =(DataTable) ViewState["T"];
dr = Dt.NewRow();
dr["Name"] = "Sam";
dr["CheckBox1"] = true;
dr["CheckBox2"] = false;
dr["CheckBox3"] = false;
Dt.Rows.Add(dr);
SearchGrid.DataSource = Dt;
SearchGrid.DataBind();
}
protected void MyGrid_DataBound(object sender, EventArgs e)
{
(SearchGrid.Rows[SearchGrid.Rows.Count - 1].Cells[1].FindControl("CheckBox1")
as CheckBox).Checked = true;
}
}
當我單擊“添加新行”按鈕時,結果將是這樣的
但是當我再次點擊
第一行復選框未選中。 我已經為每個復選框啟用了視圖狀態,但仍然無法正常工作。 這是我應該對要綁定的數據表執行的某些操作嗎?
您的ViewState非常好。 它必須存儲要保留的數據。
您尚未將gridView Columns綁定到任何字段,在本例中為DataTable的DataColumn名稱。 像這樣綁定您的復選框:
<asp:CheckBox ID="CheckBoxX" runat="sever"
Checked ='<%# Eval("DataFieldName") %>' />
即
<asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Eval("CheckBox1") %>'
AutoPostBack="true" EnableViewState="true" />
<asp:CheckBox ID="CheckBox2" runat="server" Checked='<%# Eval("CheckBox2") %>'
AutoPostBack="true" EnableViewState="true" />
<asp:CheckBox ID="CheckBox3" runat="server" Checked='<%# Eval("CheckBox3") %>'
AutoPostBack="true" EnableViewState="true" />
因為CheckBox1,CheckBox2,CheckBox3是分配給SearchGrid(GridView)
的DataSource
的字段(列)名稱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.