2011-06-22 41 views
4

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

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

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

我想在GridView显示一个复选框,并且其中PROCESSED = N的框的值设置为UNCHECKED和PROCESSED = Y要么有一个不可编辑的复选框,要么没有复选框。

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

要填充的GridView,一个SQL语句是对数据库运行,以及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(); 

任何帮助是极大的赞赏。

回答

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> 

+0

Marco - 你我的朋友绝对是天才!多么优雅的解决方案....完美无缺.....谢谢! – itrickski

3

怎么样数据库无关的解决方案,只是在关闭的机会,你使用的是非SQLSERVER数据库;)

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

那也能工作....谢谢! – itrickski

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

</asp:CheckBox> 

这一个完美Works.I已经使用凯文和Marco代码修改。 谢谢你Kevinv和Marco