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

Iチェックボックスを表示し、処理= N UNCHECKEDにして処理= Yのボックスの値を設定するためのGridViewを希望編集不可能なチェックボックスを持つか、チェックボックスを選択しないでください。

 
     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(); 

の背後にあるコードでは、これまで持っているものである任意のヘルプは大歓迎です。

答えて

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 - あなたの友達は絶対的なGENIUSです!どのようなエレガントなソリューション....完璧に動作します.....ありがとうございます! – 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はケビンとマルコ・コードを使用して変更している。この1。 ありがとうKevinvとMarco

関連する問題