2016-11-11 20 views
1

我在C#中有一個WinForm應用程序,我需要隱藏一些文本框和標籤,具體取決於以前窗體中選擇的項目。 我禁用了設計器中的文本框和標籤,並會根據SQL表中的值再次使它們可見。 我的代碼是這一個,但我不知道如何檢查值。從SQL中檢查值以啓用文本框和標籤

private void build_Load(object sender, EventArgs e) 
{ 
    con.Open(); 
    SqlCommand cmd = con.CreateCommand(); 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "select prumos from dbo.modelos"; 
    SqlDataReader dr = cmd.ExecuteReader(); 

    if (dr.HasRows) 
    { 
     while (dr.Read()) 
     { 
      var check = dr["prumos"].ToString(); 
      textBox13.Visible = check == "2"; 
      textBox18.Visible = check == "2"; 
      textBox17.Visible = check == "2"; 
      label16.Visible = check == "2"; 
      return; 
     } 
    } 
    else 
    { 
     //var check = dr["prumos"].ToString(); 
     //textBox13.Visible = check == "3"; 
     //textBox18.Visible = check == "3"; 
     //textBox17.Visible = check == "3"; 
     //textBox14.Visible = check == "3"; 
     //textBox16.Visible = check == "3"; 
     //textBox15.Visible = check == "3"; 
     //label16.Visible = check == "3"; 
     //label20.Visible = check == "3"; 
     //return; 
    } 
    con.Close(); 

我也想申請一個else if,這樣如果id爲2 ...一些文本框出現,ifthe id爲3 ...更多的他們出現。

任何人都可以幫忙,

在此先感謝。

回答

0

SqlReader可以檢查你的命令值。檢查:

con.Open(); 
SqlCommand cmd = con.CreateCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = "select prumos from dbo.modelos"; 
SqlDataReader dr = cmd.ExecuteReader(); 



    if (dr.HasRows) 
    { 

     while(dr.Read()) 
     { 
      var check = dr["prumos"].ToString() 
      //if "2" then true, else false 
      textBox13.Visible = check == "2"; 
     } 

    } 

else 
    { 
    //no row return 
    } 
+0

我認爲這是完美的,但是當我應用代碼時,我得到錯誤:_Invalid read attempt when data is present present__ in the line'var check = dr [「prumos」]。ToString();' thable有數據。 – MarcIT

+0

現在我沒有錯誤,但我失去了與數據庫的連接,我將編輯上面的代碼到新版本。 你可以看看嗎? 感謝您的幫助 – MarcIT

+0

@MarcIT我剛測試過它。它可以在我的電腦上正常工作。讀取值之後關閉Reader和Connection? – Badiparmagi

0

cmd.ExecuteNonQuery();通常用於執行不返回結果的SQL語句(如更新語句)。

使用這樣的事情,而不是:

var prumos = cmd.ExecuteScalar(); 
+0

感謝您的幫助,但你可以幫我用'if'語法 我似乎無法獲得這項權利。我想要的是類似的東西。 '如果prumos值來自dbo.modelos = 2' ... – MarcIT

0
con.Open(); 
    SqlCommand cmd = con.CreateCommand(); 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "select prumos from dbo.modelos"; 
    int value = (int)cmd.ExecuteScalar(); 
    if (value == 2) ; //database value prumos =2 
    { 
     textBox13.Visible = true; 
     textBox18.Visible = true; 
     textBox17.Visible = true; 
     label16.Visible = true; 
     return; 
    } 
    else if (value == 3) ; //database value prumos = 3 
    { 
     textBox13.Visible = true; 
     textBox18.Visible = true; 
     textBox17.Visible = true; 
     textBox14.Visible = true; 
     textBox16.Visible = true; 
     textBox15.Visible = true; 
     label16.Visible = true; 
     label20.Visible = true; 
     return; 
    } 

你可以做類似於我已經通過編輯你的代碼上面顯示的東西。 通過使用ExecuteScalar()將返回對象,您可以根據您的要求或來自數據庫的值將其轉換爲int或字符串,並以我上面提到的方式使用它。