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

时间:2011-06-22 19:08:14

标签: c# database gridview checkbox datatable

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

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

        PROCESSED   NAME             DATE            
            Y       Mickey Mouse     11/15/2011
            N       Donald Duck      4/01/2012
            Y       James Bond       5/02/2011

我希望gridview显示一个复选框,并将框的值设置为UNCHECKED,其中PROCESSED = N,而PROCESSED = Y则具有不可编辑的复选框或根本没有复选框。

        PROCESSED   NAME             DATE            
           [/]       Mickey Mouse     11/15/2011
           [ ]       Donald Duck      4/01/2012
           [/]       James Bond       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(); 

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:9)

你可以这样做:

首先在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>

答案 1 :(得分:3)

与数据库无关的解决方案怎么样,只是因为您使用的是非sqlserver数据库;)

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

答案 2 :(得分:2)

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

</asp:CheckBox>

这一个Perfectly Works.I已使用Kevin和marco Code进行了修改。 谢谢你Kevinv和Marco