【问题标题】:check/uncheck Checkboxes in gridview while binding source绑定源时选中/取消选中gridview中的复选框
【发布时间】:2014-04-07 03:21:30
【问题描述】:

我正在做一个项目。我有一个网格视图,其中一列有复选框。现在我想用数据填充我的网格视图,并根据我的状态字段相应地选中/取消选中复选框。直到现在我在 gridview 行中处理它数据绑定事件。但我只想知道在绑定源时有什么方法可以标记复选框。

我正在执行的查询以获取 gridview 中的数据

select s.studentcode,s.studentname,r.status from tblstudent s join tblresults r on s.studentcode=r.studentcode

我得到的输出

现在我希望如果我的状态是“提升”复选框被选中,如果它是“未提升”复选框被取消选中。我不想使用行数据绑定方法。只想在下面的行中完成我的工作

 sql = "select s.studentcode,s.studentname,r.status from tblstudent s join tblresults r on s.studentcode=r.studentcode";
    ds = obj.openDataset(sql, Session["SchoolCode"].ToString());
    if (ds.Tables[0].Rows.Count > 0)
    {
        grdstudents.DataSource = ds;
        grdstudents.DataBind();
        grdstudents.Visible = true;
    }
    else
    {
        alertdiv.Visible = true;
        lblalertmsg.Visible = true;
        btnclose.Visible = true;
        lblalertmsg.Text = "No Record found";
    }

解决方案

查询

select s.studentcode,s.studentname,if(r.status='Promoted',true,false) as status from tblstudent s left join tblresults r on s.studentcode=r.studentcode where s.classcode='10000'

grdstudents.DataSource = ds;// note we binded to final table
grdstudents.DataBind();

gridview 内 aspx 页面中的复选框字段:

<ItemTemplate>
               <asp:CheckBox ID="chkapply" runat="server" Checked='<%# Convert.ToBoolean(Eval("status"))%>'/>
           </ItemTemplate>

此解决方案将帮助您避免在使用 gridview 的 itembinding 或 row 数据绑定事件时编写额外的代码

【问题讨论】:

    标签: c# mysql asp.net gridview


    【解决方案1】:

    只能使用布尔值来选中/取消选中复选框。在这种情况下,因为 Column: 'status' 不代表布尔值,因此直接绑定数据将无法达到目的。

    您需要遵循两个步骤:

    第 1 步。) 将原始数据复制到新表中,并将“状态”列的数据类型更改为布尔值。

    第 2 步。) 使用原始表格的数据修改最终表格状态列中的数据。

    第 1 步:

    ds = obj.openDataset(sql, Session["SchoolCode"].ToString());
    DataTable dtOriginalTable = ds.Tables[0];
    DataTable dtFinalTable = new DataTable();
    foreach (DataColumn dc in dtOriginalTable.Columns)
    {
    dtFinalTable.Columns.Add(dc.ColumnName);
    }
    foreach (DataColumn dc in dtFinalTable.Columns)
    {
               if (dc.ColumnName == "status")
                   dc.DataType = System.Type.GetType("System.Boolean");
    }
    

    下面的第 2 步:

    foreach (DataRow drow in dtOriginalTable.Rows)
    {
             if( drow["status"].ToString().Equals("Promoted"))
                  drow["status"]="true";
             else
                  drow["status"]="false"
    // ADD the row to final table 
    dtFinalTable.Rows.Add(drow.ItemArray);
    }
    

    现在将您绑定到 GridView 为:

    grdstudents.DataSource = dtFinalTable ;// note we binded to final table
    grdstudents.DataBind();
    

    注意:: 为什么需要第 1 步?因为一旦填充了数据,就无法更改列的数据类型。

    当数据库有大量数据时也会出现性能问题。

    【讨论】:

    • 但是复选框将如何绑定到状态字段。
    • 你应该使用“Checked”属性: 或者也试试:Checked=''
    【解决方案2】:

    您需要对网格使用 OnItemDataBoundEvent。 如果您不想使用该事件。然后就可以遍历gridview的所有行了。

    如果您的网格 ID 是 grid1,则循环遍历 grid1.Rows 中的所有行。 您必须在行中找到您的复选框,然后根据您的数据选中/取消选中它。

    foreach (GridViewRow row in grid1.Rows)
    {
       CheckBox checkBox1 = row.FindControl("checkBox1") as CheckBox;
       checkBox1.Checked = true; // based on condition
    
    }
    

    【讨论】:

    • 但是我不想使用任何事件。可以直接做吗
    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 2013-12-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    相关资源
    最近更新 更多