2011-06-22 72 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