2015-09-04 20 views
2

SQL Server表:如何基於SQL Server列名填充複選框ID它代表

Name  Type1  Type2  Type3  Type4 
----------------------------------------------------- 
Lance  X      X   X 
John  X      X 
Mike     X   X   X 

ASP.net:

<asp:TextBox ID="txtName" runat="server"></asp:TextBox> 
<asp:Button ID="Button1" runat="server" Text="Auto Check" OnClick="Button1_Click" /> 

<asp:CheckBox ID="Type1" runat="server" /> Type1 
<asp:CheckBox ID="Type2" runat="server" /> Type2 
<asp:CheckBox ID="Type3" runat="server" /> Type3 
<asp:CheckBox ID="Type4" runat="server" /> Type4 

C#:

public void Button1_Click(object sender, EventArgs e) 
{ 
    string strQuery = @"SELECT * FROM [Db1].[dbo].[Table1] "; 
    strTxt = txtName.Text; 
    strQuery += " WHERE [Name] = '" + strTxt + "'"; 

    using (SqlConnection sc = new SqlConnection(gloString)) 
    { 
     try 
     { 
      sc.Open(); 
      SqlCommand scd = new SqlCommand(strQuery); 
      scd.Connection = sc; 

      SqlDataReader sdr = new SqlDataReader(); 
      sdr = scd.ExecuteReader(); 

      while (sdr.Read()) 
      { 
       //use a foreach by column and check them? 
      } 
     } 
     catch (SqlException) 
     { 
     } 
     finally 
     { 
      sc.Close(); 
     } 
    } 
} 

我知道我可以使用if語句來勾選X的相應列的任何框。

相反,我怎麼能創建一個foreachfor聲明它需要的列名和填充對應於列名的複選框ID,所以我沒有使用大量if聲明。

因此,如果我輸入Lance作爲名稱並提交,Type1,Type3和Type4將自動檢查。

+0

可以使用CheckBoxList的。運行一個foreach,如果相應的值不爲空,你可以在循環中檢查它。 – Partha

回答

1

試試這個:

for (int i = 0; i < sdr.FieldCount; i++) 
    { 
     bool val = Convert.ToBoolean(dr[i]); 
     string colName = sdr.GetName(i); 
     if (colName != "Name" && val) 
     { 
      CheckBox myChkBox = (CheckBox)Page.FindControl(colName); 
      myChkBox.checked = val; 

     } 
    } 
+0

所以如果X表示它應該被檢查並且空白表示它不應該,上面的代碼是否仍然工作? – Si8

+0

試過這樣的事情:'bool blVal = false; \t \t \t \t \t \t如果(SDR [I] = DBNull.Value!) \t \t \t \t \t \t { \t \t \t \t \t \t \t blVal = TRUE; \t \t \t \t \t \t}'但我不斷收到此錯誤:'無效的嘗試如果你在你的數據庫中使用「X」的字符串值,而不是布爾值true或當沒有數據是present.' – Si8

+1

閱讀假。首先,我會考慮改變這一點。如果該列的唯一可能值是'X'或null。然後將列更改爲默認值爲false的布爾值會更有意義,並且上述方法可行。否則'bool blVal =(sdr [i] == DBNull.Value)?假:真;'應該管用。確保所有的代碼都在你的「While(sdr.Read())」語句中,你可能想在你嘗試讀取之前檢查sdr是否有數據。 「if(sdr.HasRows)」 –

1

在您想要綁定的列的複選框中添加數據綁定,速度更快。

checkboxtype1.DataBindings.Add("Checked",Bindingsource~whatever source,"ColumnName"); 

if it is stored as a 1 or 0 您將需要此:

Binding bind = new Binding("Checked", bindingSource5, "Type1"); 
    bind.Format += (s,e) => { 
      e.Value = (int)e.Value == 1; 
     }; 
    CheckBoxType1.DataBindings.Add(bind); 

OR:

//Retrieve column schema into a DataTable. 
schemaTable = myReader.GetSchemaTable(); 

//For each field in the table... 
foreach (DataRow myField in schemaTable.Rows){ 
    //For each property of the field... 
    foreach (DataColumn myProperty in schemaTable.Columns) 
    { 
    CheckboxTyp1.Checked = (bool) myField[myProperty]); 
    } 

CheckboxType1是你checkboxID然後簡單地綁定到列名的綁定。 Type1 所以,如果你有四個複選框 CheckboxType1,CheckboxType2,CheckboxType3,CheckboxType4 然後將每個綁定到對應的列,如果你有一個數據網格中的對象列表,並且你的複選框在網格中有一種不同的綁定方式對於這一點,但類似。

綁定4複選框將結果:

checkboxtype1.DataBindings.Add("Checked",Bindingsource~whatever source,"ColumnNameType1"); 
checkboxtype2.DataBindings.Add("Checked",Bindingsource~whatever source,"ColumnNameType2"); 
checkboxtype3.DataBindings.Add("Checked",Bindingsource~whatever source,"ColumnNameType3"); 

等等。 從你的代碼問題來看,它看起來像你想要的只是一行數據。 名稱類型1類型2類型3類型4

checkboxtype1可以是CheckBox1或ChkBillyBob它的名稱並不重要。

[MyCheckBox].DataBindings.Add("Checked" ~ where Checked is a Property of the Control as a string name - Checkbox in this case has property Checked. 
[MyCheckBox].DataBindings.Add("Checked", BindingSource ~ where binding source is your reader ; you should not need to iterate it unless you are expecting more than one result back. the while(sdr.Read()) can go just use the DataReader returned. 
[MyCheckBox].DataBindings.Add("Checked",Bindingsource~whatever source,"ColumnNameType1" ~ ColumnNameType1 is the name of your column as a string hence it is in quotes'. 

正如我所說,如果你有一個對象列表 - 工作有點不同,但非常相似。您的預期結果/目的沒有完全說明。

+0

我還必須指定每個單獨的複選框ID? – Si8

+1

看看Gregs的答案我認爲它更清晰並且是一個完整的代碼示例。 – Stix