2017-04-03 6 views
0

3つのチェックボックスがありますが、SQL Serverデータベースの値に応じて選択する必要があります。データベースには名前と再配置の2つの列があります。 Relocate値がYの場合、チェックボックスを選択します。データベース値YとNに基づいて選択されたデータグリッドにチェックボックスを表示させないにはどうすればよいですか?

表:

Name | Relocate | 
----------------- 
John | Y  | 
Jane | N  | 
Mike | Y  | 

私はジョン、ジェーンとマイクに関連する3つのチェックボックスを持っている必要がありますが、私はこのことについて行くことが正確にどのようにわからない知っています。私が試したことはありますが、すべてのチェックボックスが選択されています。 2つのチェックボックスを選択する必要がありますが(JohnとMike)、1つのチェックボックスは選択しないでください(Jane)。

ASP.NET

<asp:CheckBox ID="chkRelocate" runat="server" /> 
<asp:CheckBox ID="chkRelocate0" runat="server" /> 
<asp:CheckBox ID="chkRelocate1" runat="server" /> 

Cobebehind C#

public partial class WebForm1 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string constring = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(constring)) 
     { 
      using (SqlCommand cmd = new SqlCommand("SELECT Name, Relocate FROM Employees", con)) 
      { 
       cmd.CommandType = CommandType.Text; 
       con.Open(); 
       SqlDataReader dr = cmd.ExecuteReader(); 
       while (dr.Read()) 
       { 
        chkRelocate.Checked = dr["Relocate"].ToString() == "Y"; 
        chkRelocate0.Checked = dr["Relocate"].ToString() == "Y"; 
        chkRelocate1.Checked = dr["Relocate"].ToString() == "Y"; 
       } 
       con.Close(); 
      } 
     } 

    } 
} 
} 
+0

チェックボックスだけでなくDataGridのコードを表示する方が簡単です。しかし、私はCheckedプロパティを何にしても、 '

+0

DataGridにデータをどのように設定しますか? – Win

+0

私はデータグリッドを使用していません。オンラインで検索するとすべてのソリューションがデータグリッドを示していたので、データグリッドを使用していないと指定しています。 –

答えて

0

あなたのコード内の問題は、同時にすべての3 chackboxes値を設定していることです。最初の反復では、すべてを「チェック済み」に、2番目をすべて「未チェック」に、3番目をすべて「チェック済み」に設定します。 また、あなたの "con"が "using"の内部にある場合、なぜあなたは余分なcon.Open()とcon.Close()で指定しますか? (これは悪いアプローチになりますが)、私が言うだけで3項目を保証した場合には

public partial class WebForm1 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     var checkBoxValues = new bool[3](); 
     string constring = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(constring)) 
     { 
      using (SqlCommand cmd = new SqlCommand("SELECT Name, Relocate FROM Employees", con)) 
      { 
       cmd.CommandType = CommandType.Text; 
       con.Open(); 
       SqlDataReader dr = cmd.ExecuteReader(); 
       var i = 0; 
       while (dr.Read()) 
       { 
        checkBoxValues[i] = dr["Relocate"].ToString() == "Y"; 
        i++; 
       } 
      } 
     } 
     chkRelocate.Checked = checkBoxValues[0]; 
     chkRelocate0.Checked = checkBoxValues[1]; 
     chkRelocate1.Checked = checkBoxValues[2]; 
    } 
} 

より良いアプローチは、リストそれを自己の中にチェックボックスを配置するだろう - そうwhileループを使用して変数値を反復して設定することができます。 CheckBoxList(https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkboxlist(v=vs.110).aspx

+0

このメソッドは機能しました。余分なcon.open ...私はしない場合、私は次のエラーが表示されるためです:ExecuteReaderは、開いて利用可能な接続が必要です接続の現在の状態は閉じています –

+0

あなたは正しいですが、 (私はそれに応じて私の答えを編集しました) – AssassinLV

+0

さて、行が成長し続けて、それらの3だけではない場合はどうでしょうか? –

関連する問題