【发布时间】:2017-04-21 12:21:55
【问题描述】:
我有一个相当简单的应用程序,它返回一个失败的报告列表,左侧有一个 ID、名称和时间限制字段以及复选框模板字段。
我有一个“重新安排”按钮,当按下该按钮时,应该会选取已勾选复选框的行并进行处理。
GridView 加载成功,我可以选择/取消选择复选框,但是当我按下“重新安排”按钮并返回代码时,复选框不再存在。
我知道这与动态控制/回发有关,并且需要重新创建复选框,并且我已经尝试了许多针对以前类似问题的建议,但没有任何效果
GridView - AutoGenerate Columns False(尝试正确)
按钮 - OnClientClick=""(尝试返回 false)
字段最初创建并绑定到数据表(数据表有 3 列映射到 3 个绑定字段),如下所示:-
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)
【问题讨论】:
-
你为什么在 c# 中创建列,你可以在 aspx 页面中做吗?
-
我不精通 ASP,我最近从 COBOL 交叉培训到 C#,我的 ASP 技能仅限于 Visual Studio 为我生成的内容。