2016-11-11 3 views
1

У меня есть приложение WinForm на C# в witch Мне нужно скрыть некоторые текстовые поля и метки в зависимости от элемента, выбранного в предыдущей форме. Я отключил текстовые поля и метки в дизайнере и сделал их видимыми снова в зависимости от значения из таблицы 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 так, что если идентификатор 2 ... появляются некоторые текстовые поля, Ifthe идентификатор 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 попытка чтения, когда данных нет ._ в строке' var check = dr ["prumos"]. ToString(); ' У thable есть данные. – MarcIT

+0

Теперь я не получаю ошибки, но я потерял соединение с БД, я отредактирую свой код выше до новой версии. Можете ли вы взглянуть? спасибо за помощь – MarcIT

+0

@MarcIT я только что протестировал его. Он отлично работает на моем компьютере. закрываете ли вы Reader и Connection после чтения значения? – Badiparmagi

0

cmd.ExecuteNonQuery(); обычно используется для выполнения операторов SQL, которые не возвращают результаты (например, «Обновления»).

использовать что-то вроде этого, вместо:

var prumos = cmd.ExecuteScalar(); 
+0

спасибо за помощь, но вы можете помочь моей с 'if' синтаксиса я не могу показаться, чтобы получить это право. я хочу что-то типа. 'if prumos value from 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 или string в соответствии с вашим требованием или значением, которое поступает из базы данных, и использовать его так, как я упоминал выше.

Смежные вопросы