【问题标题】:C# GridView Dynamic CheckBox DisappearingC# GridView 动态复选框消失
【发布时间】: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 为我生成的内容。

标签: c# asp.net


【解决方案1】:

试试这个

把这个写在你的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)

【讨论】:

    猜你喜欢
    • 2019-06-22
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多