Как проверить, является ли значение столбца DataGridView нулевым или 0 в c #? - PullRequest
0 голосов
/ 25 июня 2018

Я разрабатываю приложение для формы Windows или книжный магазин, используя c #. Это представление данных ведет себя как корзина продаж. Загрузка данных в datagridview из базы данных SQL.

1-й столбец 0, столбец 1, столбец 2, столбец 3, столбец 4 и столбец 5 состоят из BookName, ISBN_No, Количество, UnitPrice, Всего и акции. Когда я выбираю BookName, ISBN_No и Unit_price будут автоматически заполняться. Я хотел бы знать, как проверить, содержит ли значение ячейки datagridview ноль или ноль. Я попытался следующий код. Но это не сработало.

if(Convert.ToInt32(row.Cells[dataGridView1.Columns[5].Index].Value) == 0)
                {
                    MessageBox.Show("Quantiy is not Available");
                }

Это ничего не отображало, даже если я ввел нулевое значение в эту ячейку данных.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Я предполагаю, что неловкая строка кода ...

Convert.ToInt32(row.Cells[dataGridView1.Columns[5].Index].Value)

может быть сбивает вас с толку. Convert.ToInt32 вернет ноль (0), если…

row.Cells[dataGridView1.Columns[5].Index].Value

возвращает ноль ... поэтому использование этой конструкции не поможет вам различить значение null и нулевое (0) значение, поскольку ОБА значения вернут ноль (0).

Код выдаст исключение FormatException, если Value не является допустимым числом. Он НЕ будет генерировать исключение, если значение равно нулю.

Чтобы помочь, я уверен, что вам нужно будет разбить это на три (3) части. 1) Проверьте значение null. 2) Если не ноль, проверьте правильность номера. 3) Если номер действительный, проверьте, равен ли он нулю (0).

«Неловкая» часть оператора if это…

dataGridView1.Columns[5].Index  ???

это «всегда» будет возвращать «5». Поэтому утверждение…

Convert.ToInt32(row.Cells[dataGridView1.Columns[5].Index].Value

можно переписать как ...

Convert.ToInt32(row.Cells[5].Value

С учетом сказанного ниже приведен код, который поможет различать нулевые значения, нечисловые значения и, наконец, если значение равно нулю. Как предполагает Дериндер, лучше использовать метод int32.TryParse.

private void Form1_Load(object sender, EventArgs e) {
  FillGrid();
}

private void FillGrid() {
  for (int i = 0; i < 10; i++) {
    dataGridView1.Rows.Add("C0R" + i, "C1R" + i, "C2R" + i, "C3R" + i, "C4R" + i, i);
  }
}

private void button1_Click(object sender, EventArgs e) {
  DataGridViewRow row = dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex];
  if (row.Cells[5].Value != null) {
    if (Int32.TryParse(row.Cells[5].Value.ToString(), out Int32 numvalue)) {
      if (numvalue == 0) {
        MessageBox.Show("Quantity/Value is not null and is equal to zero 0");
      }
      else {
        MessageBox.Show("Quantity/Value is not null, is a valid number but it is NOT equal to zero 0. Its value is: " + numvalue);
      }
    }
    else {
      MessageBox.Show("Quantity/Value is not null but it is not a valid number. Its value is: " + row.Cells[5].Value.ToString());
    }
  }
  else {
    MessageBox.Show("Quantity/Value is null...");
  }
}
0 голосов
/ 25 июня 2018

Я думаю, что вы можете решить вашу проблему с помощью метода "int32.TryParse".Другое преимущество состоит в том, что он не генерирует исключение, как convert.toint32, если это не удается.Вы всегда на безопасной стороне.

...