C# 如何在mySQL中检索数据并将其放在datagridview的特定单元格中

C# 如何在mySQL中检索数据并将其放在datagridview的特定单元格中,c#,datagridview,mysqldatareader,C#,Datagridview,Mysqldatareader,我想把数据库中的数量列放在datagridview中,datagridview中首先加载了数据,包括数量列和5列。现在我尝试在数据库中加载列quantity。这是我的密码: using (MySqlConnection con = new MySqlConnection(serverstring)) { string query = @"SELECT quantity FROM tblOrder_Products

我想把数据库中的
数量
列放在datagridview中,datagridview中首先加载了数据,包括
数量
列和5列。现在我尝试在数据库中加载列
quantity
。这是我的密码:

using (MySqlConnection con = new MySqlConnection(serverstring))
{
    string query = @"SELECT quantity 
                    FROM tblOrder_Products
                    WHERE order_ID=@ID";

    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中,而不删除或覆盖加载在其中的前一个?

如果我理解正确,您已经用数据填充了网格,并且希望更改属于列
Quantity
的单元格的内容,并引用使用
ID
单元格查找数据库中更新值的行

在这种情况下,您不应该使用datatable重新绑定网格,只需执行命令,检索更新后的值,并为请求ID的行设置单元格
数量

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;
    }
}
使用(MySqlCommand cmd=newmysqlcommand(query,con))
{
cmd.Parameters.AddWithValue(“@ID”,txtboxID.Text);
object result=cmd.ExecuteScalar();
如果(结果!=null)
{
整数数量=转换为32(结果);
//现在您需要找到包含传递的ID的行
DataGridViewRow行=grid.Rows
.Cast()
.Where(r=>r.Cells[“ID”].Value.ToString().Equals(txtBoxID.Text))
.First();
行.单元格[“数量”]。值=数量;
}
}
更新
在您的评论之后,现在很明显您有许多查询返回的记录,并且您希望更新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 order_ID=@ID";

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;
    }
}
//查询还返回数据库中的Variant列
//该列用于标识要在datagridview上更新的对应行
//我还假设variant列来自同一个表(否则需要连接)
字符串查询=@“选择变量,数量”
来自tblOrder_产品
其中order_ID=@ID”;
con.Open();
使用(MySqlCommand cmd=newmysqlcommand(query,con))
{
cmd.Parameters.AddWithValue(“@ID”,txtboxID.Text);
//无法使用ExecuteScalar,我们需要一个SqlDataReader来循环结果
SqlDataReader=cmd.ExecuteReader();
while(reader.Read())
{
int数量=reader.GetInt32(1);
//现在我假设Variant列是string类型,更改Get
//因此,如果不是
string v=reader.GetString(0);
//使用从数据库检索的值来标识要更新的行
DataGridViewRow行=grid.Rows
.Cast()
.Where(r=>r.Cells[“variant”].Value.ToString().Equals(v))
.First();
行.单元格[“数量”]。值=数量;
}
}

是的,这就是我想做的。非常感谢。我将尝试您的代码。我正在尝试理解代码,但当我阅读注释
时,现在您需要找到包含传递的ID的行
,这意味着datagridview属于多个ID,但在我的情况下,这并不是因为datagridview只属于一个ID。例如,在我的情况下,我有一个名为
variant
的列每个变量名称都有其
数量
,但它只属于一个ID。但这意味着您的查询返回多个DataRow。如果这是真的,那么您需要更改查询以同时返回一个标识符(变量列),该标识符有助于查找DataGridViewRow,以使用从数据库加载的新数量进行更新(并且您不能使用ExecuteScalar)。是的,它返回多行。好的…那么什么是正确的查询?我要使用连接吗?要将datagridview中加载的变量名称与其数据库中的数量相匹配,请执行以下操作:
DataGridViewRow row=grid.Rows
grid.Rows无效。我的意思是它没有出现在智能意义上。