Raja Ganapathy Ответов: 2

Как проверить, что значение строк таблицы данных не меньше нуля?


if (ds.Tables[s].Rows[i][Columncountvalue].ToString().Trim() == "")
{
   statement
}  

теперь я хочу проверить, если строки таблицы данных становятся меньше или равны 0 (нулю).
как проверить меньше или больше значения строк.

Что я уже пробовал:

я использую приведенный ниже код,но отображается недопустимая ошибка входной строки.
if (ds.Tables[s].Rows[i][Columncountvalue].ToString().Trim() <0 "")
{
   statement
}

2 Ответов

Рейтинг:
7

Wendelius

Ответ в решении 1 работает отлично. Но чтобы дать вам еще один аспект, если сценарий:
- вы используете несколько экземпляров таблицы данных с одинаковой структурой
- если вы используете таблицу данных, например, в таблице данных или аналогичной
- вы хотите сделать проверку между несколькими столбцами и так далее
Возможно, Вам будет полезно поместить проверки в одно место-таблицу данных.

Например, вы можете создать таблицу данных, специфичную для определенной структуры, и использовать событие RowChanging для выполнения проверки. Рассмотрим следующее определение таблицы данных

/// <summary>
   /// Data table for specific usage
   /// </summary>
   public class MyDataTable : DataTable {
      /// <summary>
      /// Default constructor
      /// </summary>
      public MyDataTable() : base() {
         this.RowChanging += MyDataTable_RowChanging;
         this.Columns.Add(new DataColumn() {
            ColumnName = "IntegerColumn",
            AllowDBNull = false,
            DataType = typeof(int)
         });
         this.Columns.Add(new DataColumn() {
            ColumnName = "StringColumn",
            AllowDBNull = true,
            DataType = typeof(string)
         });
      }
      /// <summary>
      /// Validate the row
      /// </summary>
      private void MyDataTable_RowChanging(object sender, DataRowChangeEventArgs e) {
         if ((int)e.Row["IntegerColumn"] <= 0) {
            e.Row.SetColumnError(this.Columns["IntegerColumn"], "Value must be at least 1");
         }
         if ((int)e.Row["IntegerColumn"] > 10
            &&  (e.Row["StringColumn"] == DBNull.Value
               || string.IsNullOrEmpty((string)e.Row["StringColumn"]))) {
            e.Row.SetColumnError(this.Columns["StringColumn"], "String column must be provided with a value if integer is greater than 10");
         }
      }
   }


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

Что касается использования, посмотрите на следующие примеры
MyDataTable myTable = new MyDataTable();
DataRow row;

// Add a row that will be invalid
row = myTable.NewRow();
row["IntegerColumn"] = -1;
myTable.Rows.Add(row);

row = myTable.NewRow();
row["IntegerColumn"] = 1;
myTable.Rows.Add(row);

// Add a row that will be invalid
row = myTable.NewRow();
row["IntegerColumn"] = 22;
myTable.Rows.Add(row);

row = myTable.NewRow();
row["IntegerColumn"] = 22;
row["StringColumn"] = "Some text";
myTable.Rows.Add(row);

// The table will have 4 rows and 2 of them have errors
if (myTable.HasErrors) {
   foreach (DataRow errorRow in myTable.Rows) {
      if (errorRow.HasErrors) {
         foreach (DataColumn errorColumn in errorRow.GetColumnsInError()) {
            System.Diagnostics.Trace.WriteLine(string.Format("{0}: {1}",
               errorColumn.ColumnName,
               errorRow.GetColumnError(errorColumn)));
         }
      }
   }
}

Кроме того, одним из преимуществ является то, что многие элементы управления, привязываемые к таблице данных, проверяют, есть ли в строке ошибки. В этом случае они автоматически выделяют строку, обеспечивающую обратную связь с пользователем.

Пример написан быстро, поэтому он нуждается в дополнительной работе. Кроме того, прежде чем погрузиться в обработку событий в таблице данных, прочтите Обработка Событий DataTable[^]


Рейтинг:
13

Afzaal Ahmad Zeeshan

Этот метод пустой строки будет отлично работать для строк в случае целочисленных значений, которые вы должны преобразовать в целое число, например,

int value;
if(int.TryParse(ds.Tables[s].Rows[i][Columncountvalue].ToString(), out value)) {
   // value parsed, check if greater than zero
   if(value >= 0) {
      // Logic code here.
   } else {
   }
}

Таким образом, Вы сможете проверить значение, используя арифметические и логические операции с числами.

А с другой стороны, следующий код даже не будет компилироваться:
ds.Tables[s].Rows[i][Columncountvalue].ToString().Trim() <0 ""

Потому что, 0 "" это незаконное утверждение в C#. Для получения дополнительной информации, пожалуйста, пройдите через: Типа int32.Метод TryParse (String, Int32) (System)[^]


Raja Ganapathy

Огромное спасибо Afzaal Зишан Ахмед