根据数据表值在gridview中设置复选框

Posted

技术标签:

【中文标题】根据数据表值在gridview中设置复选框【英文标题】:set checkbox in gridview based on datatable value 【发布时间】:2011-09-20 16:06:56 【问题描述】:

我有一个带有复选框字段和几个绑定字段的 gridview 控件。复选框字段不直接映射到数据库中的字段。相反,我想从数据库中的一个字段中读取一个值并“检查”一些复选框。

例如,给定以下数据库中的数据 -> 数据表

处理名称 日期 Y 米老鼠 11/15/2011 N唐老鸭 4/01/2012 Y 詹姆斯邦德 5/02/2011

我希望 gridview 显示一个复选框并将框的值设置为 UNCHECKED 其中 PROCESSED = N 并且对于 PROCESSED = Y 要么有一个不可编辑的复选框,要么根本没有复选框。

处理名称 日期 [/] 米老鼠 2011 年 11 月 15 日 [ ] 唐老鸭 4/01/2012 [/] 詹姆斯邦德 5/02/2011

为了填充gridview,对数据库运行SQL stmt,并将SQL 查询的结果存储在数据表中。在将数据表绑定到gridview之前,我想检查“已处理”字段并根据该值设置复选框。

这里是 gridview 控件(为清楚起见缩短了):

<asp:GridView ID="gridview_all_applicants" runat="server" AllowPaging="True">
        <Columns>
          <asp:TemplateField HeaderText="Complete">
                <ItemTemplate>
                    <asp:CheckBox ID="process_flag" runat="server" />
                </ItemTemplate>
          </asp:TemplateField>
          <asp:BoundField DataField="lastname" HeaderText="Last Name" ReadOnly="True"  SortExpression="lastname" />

这是我目前在后面的代码中所拥有的

 SqlCommand cmd = new SqlCommand(sql query here);
 SqlDataAdapter da = new SqlDataAdapter();
 DataTable dt = new DataTable();
 da.SelectCommand = cmd;
 // Save results of select statement into a datatable
 da.Fill(dt);
 foreach (DataRow r in dt.Rows)
 
        // do some processing of data returned from query
        // read the char value from the returned data and set checkbox

             procflag = r["process_flag"].ToString().ToLower();
             CheckBox chkbox = new CheckBox();
             if (procflag == null || procflag == "n")
             
                // SET CHECKBOX TO "NOT CHECKED"        

              
              else
              
                 // SET CHECKBOX TO "CHECKED" AND MAKE IT UNCLICKABLE
                 // ----OR---- DO NOT DISPLAY CHECKBOX AT ALL.

               
      // end for each


          gridview_all_applicants.DataSource = dt;
          gridview_all_applicants.DataBind(); 

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

你可以这样做:

sql server 中的第一个:


SELECT 
    CAST(CASE PROCESSED WHEN 'Y' THEN 1 ELSE 0 END AS BIT) AS PROCESSED
    NAME
    DATE
FROM ExampleTable

在 C# 代码中:


SqlCommand cmd = new SqlCommand(sql query here); 
SqlDataAdapter da = new SqlDataAdapter(); 
DataTable dt = new DataTable(); 
da.SelectCommand = cmd; 

// Save results of select statement into a datatable 
da.Fill(dt);

gridview_all_applicants.DataSource = dt;          
gridview_all_applicants.DataBind(); 

最后在 aspx 中:

<asp:TemplateField HeaderText="Complete">
<ItemTemplate>
    <asp:CheckBox ID="process_flag" runat="server" Checked='<%# bool.Parse(Eval("PROCESSED").ToString()) %>' Enable='<%# !bool.Parse(Eval("PROCESSED").ToString()) %>'/>
</ItemTemplate>

【讨论】:

Marco - 你我的朋友绝对是个天才!多么优雅的解决方案……完美……谢谢!!!【参考方案2】:

如果您使用的是非 sqlserver 数据库,那么与数据库无关的解决方案怎么样;)

<asp:CheckBox ID="process_flag_check" runat="server" 
            Checked='<%# Eval("process_flag").ToString() == "Y" ? "True": "False" %>'
            Enabled="false"/>
</asp:Content>

【讨论】:

【参考方案3】:
<asp:CheckBox ID="process_flag_check" runat="server" 
            Checked='<%# bool.Parse(Eval("process_flag").ToString() == "Y" ? "True": "False") %>'
            Enabled="false"/>

</asp:CheckBox>

这个完美的作品。我已经使用 Kevin 和 marco Code 进行了修改。 谢谢你 Kevinv 和 Marco

【讨论】:

以上是关于根据数据表值在gridview中设置复选框的主要内容,如果未能解决你的问题,请参考以下文章

Devexpress gridview复选框列选择?

从数组中设置选中的复选框[关闭]

在codeigniter中的数据库中设置值时如何将复选框显示为选中状态

如何在数组中设置特定对象的状态

如何在 vba 中设置选中的属性(格式或控制工具箱)

在 ReactJS 环境中设置复选框样式