2015-11-21 2 views
0

У меня есть две таблицы dataGridView. Один с поставщиками, второй с продуктами. Я хочу, чтобы они работали так: когда я нажимаю на строку в DataGridView поставщиков, в Products dataGridView будет отображаться только продукция выбранного поставщика. функция Это я написал для этой цели:C# dataGridView не показывает информацию, которую я хочу показать

static public void SuppliersProducts(DataGridView _productslist) 
    { 
     try 
     { 
      connection.Open(); 
      SqlCommand commandShow = new SqlCommand("SELECT a.Name FROM Products a INNER JOIN SuppliersProducts b ON a.Id = b.ProductId WHERE b.SupplierId = @SupplierId", connection); 
      DataGridViewRow dr1 = _productslist.SelectedRows[0]; 
      commandShow.Parameters.AddWithValue("@SupplierId", dr1.Cells[0].Value); 
      commandShow.ExecuteNonQuery(); 
     } 
     catch (SqlException exception) 
     { 
      MessageBox.Show(exception.ToString()); 
     } 
     finally 
     { 
      connection.Close(); 
     } 
    } 

Im используя его в dataGridView1_CellMouseClick:

private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 

     SuppliersProducts(ProductsList); 
    } 

Где ProductsList мой DataGridView для таблицы Products. Проблема в том, что он не бросает никаких ошибок, но когда я нажимаю на определенного поставщика в моей первой таблице данныхGridView, ничего не происходит со вторым. Что я делаю не так?

ответ

0

Вы можете сделать это:

Изменение CellMouseClick событие с CellClick, потому что CellMouseClick пожаров, когда-либо нажимает кнопку мыши на ячейке

и данные SQL сервера должны хранить где-то

и ExecuteNonQuery() использовать для вставки, удаления, обновления и команд, которые не возвращают данные

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
    { 

     SuppliersProducts(ProductsList,e.RowIndex); 
    } 


static public void SuppliersProducts(DataGridView _productslist,int index) 
    { 
     try 
     { 
      connection.Open(); 

      string commandShow=String.Format("SELECT a.Name FROM Products a INNER JOIN SuppliersProducts b ON a.Id = b.ProductId WHERE b.SupplierId = {0}",_productslist.Rows[index].Cells[0].Value)); 
      //Stroing sql server data 
      var dt = new DataTable(); 
      using (var da = new SqlDataAdapter(commandShow, connection)) 
       da.Fill(dt); 
      foreach(DataRow row in dt.Rows) 
      { 
       dataGridView2.Rows.Add(row[0],...); 
      } 
     } 
     catch (SqlException exception) 
     { 
      MessageBox.Show(exception.ToString()); 
     } 
     finally 
     { 
      connection.Close(); 
     } 
    } 
+0

говорится, что t hat it can not run foreach для dt, потому что DataTable не содержит общедоступного определения для 'GetEnumerator' – Martin

+1

@Martin Извините, foreach (строка DataRow в dt.Rows) ..... – AliTheOne

+0

Спасибо! Это сработало! – Martin

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