如何使用C#检查dataGridView中选定行中的单元格是否为空/空?

时间:2019-05-06 16:33:00

标签: c# winforms datagridview null cell

我正在尝试编写代码,该代码将在用值更新单元格之前检查dataGridView所选行中的单元格是否为空/空。我编写的代码可以工作,但是无论所选行的单元格中是否有值,数据都不会更新。我尝试使用此代码:

 if (dataGridView1.SelectedRows[0].Cells[1].Value == null)
            {
                try
                {
                    String ConnectionString = @"Data Source=.\SQLEXPRESS01;Initial Catalog=Vagtplan;Integrated Security=True";
                    SqlConnection myconnection = new SqlConnection(ConnectionString);
                    myconnection.Open();
                    DateTime primaryKey = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
                    SqlCommand AddNumbeCommand = myconnection.CreateCommand();
                    AddNumbeCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE [Dato] = @dato";
                    AddNumbeCommand.Parameters.Add("@ansatID", SqlDbType.Int).Value = textBox1.Text;
                    AddNumbeCommand.Parameters.Add("@dato", SqlDbType.DateTime).Value = primaryKey;
                    AddNumbeCommand.ExecuteNonQuery();
                    myconnection.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    MessageBox.Show("The cell is updated.");
                }

            }
            else
            {
                MessageBox.Show("There is already a value in the cell.");
            }

如前所述,实际结果是,无论所选行中的单元格中是否有值,数据都不会更新。预期的结果是,当用户在dataGrdView中选择ansatID列下的单元格已经具有值的行,在textBox1中写入一个值,然后按“TilføjansatID til vagten”时,他将得到错误消息:“已经存在单元格中的值。”。如果他将选择一行,而其在ansatID列下的单元格为空,则在textBox1中写入一个值,然后按“TilføjansatID til vagten”,则将执行SQL查询,并且他将收到消息“该单元格已更新”。下图也显示了这一点:enter image description here

2 个答案:

答案 0 :(得分:0)

在这种情况下,您可以访问所选行中的该特定列,错过了OwningRow部分,并且需要与一个空字符串进行比较,以防万一,以防万一:

(string)dataGridView1.SelectedCells[0].OwningRow.Cells[1].Value == "" ||
(string)dataGridView1.SelectedCells[0].OwningRow.Cells[1].Value == null

SelectedCells [0]。OwningRow表示选择的第一行,Cells [1]表示ansatID。

必须爱winforms及其清晰度。

编辑:正如某人指出的那样,您需要以winforms形式手动更新datagrid中的数据,方便地使用具有UpdateDatagrid()之类的函数,并在每次修改数据库时调用它。

答案 1 :(得分:0)

您可以使用String.IsNullOrWhiteSpace((String)dataGridView1.SelectedCells[0].OwningRow.Cells[1].Value))