2013-05-23 2 views
0

Я хочу поместить столбец quantity из моей базы данных в datagridview, который, в первую очередь, загрузил в него данные, 5 столбцов вместе со столбцом quantity. Теперь я попытался загрузить столбец quantity в моей базе. Вот мой код:Как получить данные в mySQL и поместить их в определенную ячейку в datagridview

using (MySqlConnection con = new MySqlConnection(serverstring)) 
{ 
    string query = @"SELECT quantity 
        FROM tblOrder_Products 
        WHERE [email protected]"; 

    con.Open(); 
    using (MySqlCommand cmd = new MySqlCommand(query, con)) 
    { 
     DataTable dt = new DataTable(); 

     cmd.Parameters.AddWithValue("@ID", txtboxID.Text); 
     MySqlDataReader dr = cmd.ExecuteReader(); 
     dt.Load(dr); 

     dr.Close(); 


     dataGridView2.DataSource = dt; 
     // I want to change this line or this part of code because 
     // I want to put only the column `quantity` which means 
     //retaining the data loaded previously in the datagridview 
} 

Так что мой вопрос, как я собираюсь поставить его в DataGridView без удаления или перезаписи предыдущей загруженной в него?

ответ

2

Если вы правильно поняли, что у вас уже есть сетка, заполненная данными, и вы хотите изменить содержимое ячейки, принадлежащей столбцу Quantity, и ссылаясь на строку, в которой ячейка ID используется для поиска обновленного значения в база данных.

В этом случае вы не должны пересвязать сетки снова с помощью DataTable, а просто выполнить команду, получить обновленное значение и установить ячейку Quantity для строки с идентификатором просил

using (MySqlCommand cmd = new MySqlCommand(query, con)) 
{ 
    cmd.Parameters.AddWithValue("@ID", txtboxID.Text); 
    object result = cmd.ExecuteScalar(); 
    if(result != null) 
    { 
     int quantity = Convert.ToInt32(result); 
     // Now you need to find the row that contains the ID passed 
     DataGridViewRow row = grid.Rows 
          .Cast<DataGridViewRow>() 
          .Where(r => r.Cells["ID"].Value.ToString().Equals(txtBoxID.Text)) 
          .First(); 
     row.Cells["Quantity"].Value = quantity; 
    } 
} 

UPDATE
После вашего комментария теперь ясно, что у вас много записей, возвращаемых запросом, и вы хотите обновить многие строки в DataGridView.
Это может быть достигнуто со следующими изменениями:

// The query returns also the Variant column from the database 
// The column is needed to identify the corresponding row to update on the datagridview 
// Also I am supposing that the variant column is from the same table (JOIN required otherwise) 
string query = @"SELECT variant, quantity 
       FROM tblOrder_Products 
       WHERE [email protected]"; 

con.Open(); 
using (MySqlCommand cmd = new MySqlCommand(query, con)) 
{ 
    cmd.Parameters.AddWithValue("@ID", txtboxID.Text); 

    // Cannot use a ExecuteScalar, we need a SqlDataReader to loop over the results 
    SqlDataReader reader = cmd.ExecuteReader(); 
    while(reader.Read()) 
    { 
     int quantity = reader.GetInt32(1); 

     // Now I am supposing the the Variant column is of string type, change the Get 
     // accordingly if it is not 
     string v = reader.GetString(0); 

     // Use the value retrieved from the database to identify the row to update 
     DataGridViewRow row = grid.Rows 
          .Cast<DataGridViewRow>() 
          .Where(r => r.Cells["variant"].Value.ToString().Equals(v)) 
          .First(); 
     row.Cells["Quantity"].Value = quantity; 
    } 
} 
+0

Да, это то, что я хочу сделать. Спасибо. Я попробую ваш код. – Harvey

+0

Сообщите мне, если это работает, просто выписано из моей головы без помощи IDE .... – Steve

+0

Я пытаюсь понять код, но когда я прочитал комментарий 'Теперь вам нужно найти строку, содержащую идентификатор, переданный' это означает, что datagridview принадлежит многим, но в моем случае это не потому, что datagridview принадлежит только одному ID. Например, в моем случае у меня есть столбец с именем «вариант», и каждое имя варианта имеет его «количество», но оно принадлежит только одному идентификатору. – Harvey

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

  • Нет связанных вопросов^_^