【问题标题】:How can I save cell value in datagridview rows from a loop and pass it to another loop for each row?如何从循环中保存 datagridview 行中的单元格值并将其传递给每一行的另一个循环?
【发布时间】:2020-03-16 13:19:38
【问题描述】:

我有 DataGridView 和 DataGridViewCheckBoxColumn 我想更新数据库如果复选框选中更新 test_status 到 5 ,如果复选框未选中保持 test_status = 4 。列名初始结果。

点击保存按钮时我使用了以下代码:

    private void btnSave_Click(object sender, EventArgs e)
            {
                 int test_status = 4;



     for (int i = 0; i < dgvResult.Rows.Count; i++)
                    {
                      foreach (DataGridViewRow row in dgvResult.Rows)
                    {
                      bool status = (bool)row.Cells[8].FormattedValue;
                        if (status)
                        {
                            test_status = 5;

                        }
                        else
                        {
                            test_status = 4;
                        }
                    }
                        result.UPDATE_LABORDERS_RESULTS(Convert.ToInt32(txtOrder.Text),txtExamUser.Text,
                                                  DateTime.Parse(DateTimeExamined.Value.ToString()),
                                                  Convert.ToInt32(dgvResult.Rows[i].Cells[2].Value),
                                                  dgvResult.Rows[i].Cells[4].Value.ToString(),
                                                  dgvResult.Rows[i].Cells[5].Value.ToString(),
                                                  Convert.ToInt32(dgvResult.Rows[i].Cells[7].Value.ToString()),
                                                  Convert.ToInt32(txtPno.Text),
                                                  Convert.ToInt32(txtcustid.Text),
                                                  dgvResult.Rows[i].Cells[1].Value.ToString(),
                                                  Convert.ToInt32(dgvResult.Rows[i].Cells[6].Value.ToString()),
                                                  Convert.ToInt32(txtUpdateCount.Text),test_status);


                    }

                    MessageBox.Show("Result Saved Successfully ", "Entering Result", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }
    }

我的代码有什么问题,我需要更新什么?

更新: 我调试代码,它只取最后一行的值而不是每一行,当我选中 datagridview 中最后一行的框时,它更新了数据库中的所有行并保持所有行的测试状态 = 5。

如何将 test_status 从第一个 foreach 循环传递到第二个 update_laborders_results?

【问题讨论】:

  • test_status 只有最后一行的值。您必须在更新循环中为您所在的行获取该值。
  • @LarsTech 我会怎么做你能发布代码吗?
  • 摆脱你的for-each。在你的 for 循环中移动该代码。
  • 我看到了您更新的代码。我的评论仍然有效:摆脱 for-each。
  • 字面上,删除它。看看它做了什么。它遍历行,因此最后一行是确定 test_status 值的行。 test_status 需要根据你所在的行,“i”变量来确定。

标签: c# checkbox datagridview


【解决方案1】:

如果复选框选中为 5,您可以首先使用 test_status 更新您的数据库,然后像这样执行另一个循环:

private void btnSave_Click(object sender, EventArgs e)
     {
            for (int i = 0; i < dgvResult.Rows.Count; i++)
                    {
                         foreach (DataGridViewRow row in dgvResult.Rows)
                            {

                                bool status = (bool)row.Cells[8].FormattedValue;
                                if (status)
                                {
                                    string cs = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                                    SqlConnection con = new SqlConnection(cs);
                                    SqlCommand cmd = new SqlCommand("UPDATE table set test_status = 5 // where condition ", con);
                                    con.Open();
                                    cmd.ExecuteNonQuery();
                                    con.Close();
                                }


                                result.UPDATE_LABORDERS_RESULTS(Convert.ToInt32(txtOrder.Text), txtExamUser.Text,
                                                      DateTime.Parse(DateTimeExamined.Value.ToString()),
                                                      Convert.ToInt32(dgvResult.Rows[i].Cells[3].Value),
                                                      dgvResult.Rows[i].Cells[5].Value.ToString(),
                                                      dgvResult.Rows[i].Cells[6].Value.ToString(),
                                                      Convert.ToInt32(dgvResult.Rows[i].Cells[8].Value.ToString()),
                                                      Convert.ToInt32(txtPno.Text),
                                                      Convert.ToInt32(txtcustid.Text),
                                                      dgvResult.Rows[i].Cells[2].Value.ToString(),
                                                      Convert.ToInt32(dgvResult.Rows[i].Cells[7].Value.ToString()), Convert.ToInt32(txtUpdateCount.Text));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    相关资源
    最近更新 更多