[英]C# GridView Dynamic CheckBox Disappearing
我有一個相當簡單的應用程序,該應用程序返回帶有ID,名稱和時間限制字段以及左側復選框模板字段的失敗報告列表。
我有一個“重新計划”按鈕,當按下該按鈕時,應選擇已選中復選框的行並進行處理。
GridView成功加載,我可以選擇/取消選擇復選框,但是當我按下“重新計划”按鈕並返回到代碼時,該復選框不再存在。
我知道這與動態控件/回發有關,並且需要重新創建復選框,並且我已經嘗試了許多針對以前類似問題的建議,但是沒有任何效果
GridView-自動生成列False(嘗試過)
按鈕-OnClientClick =“”(嘗試返回false)
這些字段最初是創建並綁定到數據表的(數據表有3列映射到3個Bound字段),如下所示:
TemplateField tfield = new TemplateField();
failedSchedulesGridView.Columns.Add(tfield);
BoundField bfield1 = new BoundField();
bfield1.HeaderText = "SI_ID";
bfield1.DataField = "si_id";
failedSchedulesGridView.Columns.Add(bfield1);
BoundField bfield2 = new BoundField();
bfield2.HeaderText = "SI_NAME";
bfield2.DataField = "si_name";
failedSchedulesGridView.Columns.Add(bfield2);
BoundField bfield3 = new BoundField();
bfield3.HeaderText = "SI_UPDATE_TS";
bfield3.DataField = "si_update_ts";
failedSchedulesGridView.Columns.Add(bfield3);
failedSchedulesGridView.DataSource = dt;
failedSchedulesGridView.DataBind();
可以看到,Page_Load我嘗試在這里重新創建GridView列,但是它沒有用,已被注釋掉
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
//TemplateField tfield = new TemplateField();
//failedSchedulesGridView.Columns.Add(tfield);
//BoundField bfield1 = new BoundField();
//bfield1.HeaderText = "SI_ID";
//bfield1.DataField = "si_id";
//failedSchedulesGridView.Columns.Add(bfield1);
//BoundField bfield2 = new BoundField();
//bfield2.HeaderText = "SI_NAME";
//bfield2.DataField = "si_name";
//failedSchedulesGridView.Columns.Add(bfield2);
//BoundField bfield3 = new BoundField();
//bfield3.HeaderText = "SI_UPDATE_TS";
//bfield3.DataField = "si_update_ts";
//failedSchedulesGridView.Columns.Add(bfield3);
}
failedSchedulesGridView.DataSource = dt;
failedSchedulesGridView.DataBind();
}
OnRowDataBound
protected void OnRowDataBound(Object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType != DataControlRowType.Header)
{
cbx++;
CheckBox cb = new CheckBox();
cb.ID = "cb" + cbx;
e.Row.Cells[0].Controls.Add(cb);
}
}
當我嘗試按“重新計划”按鈕后嘗試訪問復選框時,代碼失敗,因為未找到復選框:
protected void ReschedulePB2_Click(object sender, EventArgs e)
{
int i = 0;
foreach (GridViewRow row in failedSchedulesGridView.Rows)
{
i++;
string cbName = "cb" + i;
CheckBox cb = (CheckBox)row.Cells[0].FindControl(cbName);
if (cb.Checked)
嘗試這個
寫在你的aspx頁面
<asp:GridView ID="failedSchedulesGridView" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound" Width="850px" onrowcommand="GridView1_RowCommand">
<Columns>
<asp:TemplateField >
<HeaderTemplate>
<asp:CheckBox ID="cbHeader" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="cbItem" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="si_id" HeaderText="SI_ID" SortExpression="si_id" />
<asp:BoundField DataField="si_name" HeaderText="SI_NAME" SortExpression="si_name" />
<asp:BoundField DataField="si_update_ts" HeaderText="SI_UPDATE_TS" SortExpression="si_update_ts" />
</Columns>
</asp:GridView>
您的頁面加載應如下所示
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
failedSchedulesGridView.DataSource = dt;
failedSchedulesGridView.DataBind();
}
}
您的重新安排點擊將是
protected void ReschedulePB2_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in failedSchedulesGridView.Rows)
{
CheckBox cb = (CheckBox)row.Cells[0].FindControl("cbItem");
if (cb.Checked)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.