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

itr*_*ski 4 c# database checkbox datatable gridview

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

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

        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" />
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止在代码背后的内容

 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(); 
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.

小智 9

你可以这样做:

首先在sql server中:


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

在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(); 
Run Code Online (Sandbox Code Playgroud)

最后在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>
Run Code Online (Sandbox Code Playgroud)