2016-11-30 3 views
0

Я пытаюсь показать некоторые данные из базы данных в выпадающий список на основе другого выбора поля со списком с этим кодом:Нет данных показываются в выпадающем списке

private void metroComboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     DataSet dt = new DataSet(); 
     try 
     { 
      DateTime startDate = Convert.ToDateTime(metroLabel8.Text); 
      DateTime endDate = Convert.ToDateTime(metroLabel9.Text); 
      // Make sql readable 
      string sql = 
      @"Select [LedId],[LedName] from [Ledger] where Date >= @prmStartDate and Date <= @prmEndDate"; 

      // wrap IDisposable (SqlCommand) into using 
      using (SqlCommand cmd = new SqlCommand(sql, con)) 
      { 
       cmd.Parameters.Add("@prmStartDate", SqlDbType.DateTime).Value = startDate; 
       cmd.Parameters.Add("@prmEndDate", SqlDbType.DateTime).Value = endDate; 
       con.Close(); 
       SqlDataAdapter da = new SqlDataAdapter(cmd); 
       da.Fill(dt); 
       VoucherLedgerName_combo.DisplayMember = "LedName"; 
       VoucherLedgerName_combo.ValueMember = "LedId"; 
       VoucherLedgerName_combo.DataSource = dt.Tables["Ledger"]; 
      } 
     } 
     catch(Exception exe) 
     { 
      MessageBox.Show(exe.Message); 
     } 
     finally 
     { 
      if (con.State == ConnectionState.Open) 
      { 
       con.Close(); 
      } 
     } 
} 

Но я не буду получать ничего во втором выпадающем списке, и я убедитесь, что в таблице таблиц базы данных есть данные. Может ли кто-нибудь помочь мне найти проблему?

+3

Ваш запрос выполняется нормально, как вы ожидали? заполняется ли datatable? –

+1

Получаете ли вы данные для второго комбинированного блока? – FDavidov

+0

@ un-lucky, @ FDavidov, как я могу знать, что –

ответ

2

изменить заявление вашего SQL, как показано ниже (дата зарезервирована ключевым слово)

string sql = 
     @"Select [LedId],[LedName] from [Ledger] where [Date] >= @prmStartDate and [Date] <= @prmEndDate"; 

Вы должны дать имя таблицы при заполнении набора данных, так как вы используете имя, когда вы установите данные с исходным

da.Fill(dt, "Ledger"); 

или установить источник данных, как показано ниже

VoucherLedgerName_combo.DataSource = dt.Tables[0]; 
+0

Это сработало для меня спасибо –

0
DataRow dr = dt.NewRow(); 
dr["Ledger"] = "--Select All--"; 
dt.Rows.InsertAt(dr, 0); 
+1

спасибо за ваше время –

0

Вы можете изменить из

da.Fill(dt); 
VoucherLedgerName_combo.DataSource = dt.Tables["Ledger"]; 

в

da.Fill(dt, "Ledger"); 
VoucherLedgerName_combo.DataSource = dt.Tables["Ledger"].DefaultView; 

еще

VoucherLedgerName_combo.DataSource = dt.Tables[0].DefaultView; 

или

VoucherLedgerName_combo.DataSource = dt; 
+1

спасибо за ваше время –