Практическое руководство. Проверка данных, вводимых с помощью элемента управления DataGrid, в Windows Forms

Обновлен: Ноябрь 2007

0ye0dkkw.alert_note(ru-ru,VS.90).gifПримечание.

Элемент управления DataGridView заменяет элемент управления DataGrid и расширяет его функциональные возможности; однако при необходимости элемент управления DataGrid можно сохранить для обратной совместимости и использования в будущем. Дополнительные сведения см. в разделе Различия элементов управления DataGridView и DataGrid в Windows Forms.

Существуют два типа проверки вводимых данных в элементе управления Windows Forms DataGrid. При попытке пользователя ввести значение, тип которого является недопустимым для данной ячейки, например, строку вместо целого числа, новое неправильное значение заменяется предыдущим значением. Данная проверка водимых данных выполняется автоматически и ее нельзя изменить.

Другой тип проверки вводимых данных можно использовать для отклонения любых недопустимых значений, например, нулевого значения для поля, значение которого должно быть больше или равно единице, или неподходящей строки. Данная операция выполняется в базе данных с помощью обработчика событий ColumnChanging или RowChanging. В приведенном ниже примере используется событие ColumnChanging, в частности потому, что недопустимые значения запрещены для столбца "Product". Событие RowChanging можно применять для проверки того, что значение столбца "End Date" более позднее, чем столбца "Start Date" в той же самой строке.

Проверка вводимых пользователем данных

  1. Напишите код обработки события ColumnChanging для соответствующей таблицы. При обнаружении несоответствия вводимых данных вызовите метод SetColumnError объекта DataRow.

    Private Sub Customers_ColumnChanging(ByVal sender As Object, _
    ByVal e As System.Data.DataColumnChangeEventArgs)
       ' Only check for errors in the Product column
       If (e.Column.ColumnName.Equals("Product")) Then
          ' Do not allow "Automobile" as a product.
          If CType(e.ProposedValue, String) = "Automobile" Then
             Dim badValue As Object = e.ProposedValue
             e.ProposedValue = "Bad Data"
             e.Row.RowError = "The Product column contians an error"
             e.Row.SetColumnError(e.Column, "Product cannot be " & _
             CType(badValue, String))
          End If
       End If
    End Sub
    
    //Handle column changing events on the Customers table
    private void Customers_ColumnChanging(object sender, System.Data.DataColumnChangeEventArgs e) {
    
       //Only check for errors in the Product column
       if (e.Column.ColumnName.Equals("Product")) {
    
          //Do not allow "Automobile" as a product
          if (e.ProposedValue.Equals("Automobile")) {
             object badValue = e.ProposedValue;
             e.ProposedValue = "Bad Data";
             e.Row.RowError = "The Product column contains an error";
             e.Row.SetColumnError(e.Column, "Product cannot be " + badValue);
          }
       }
    }
    
    //Handle column changing events on the Customers table
    private void Customers_ColumnChanging(System.Object sender, System.Data.DataColumnChangeEventArgs e) 
    {
       //Only check for errors in the Product column
       if ( e.get_Column().get_ColumnName().Equals("Product") ) 
       {
          //Do not allow "Automobile" as a product
          if ( e.get_ProposedValue().Equals("Automobile") ) 
          {
             System.Object badValue = e.get_ProposedValue();
             e.set_ProposedValue("Bad Data");
             e.get_Row().set_RowError("The Product column contains an error");
             e.get_Row().SetColumnError(e.get_Column(), "Product cannot be " + badValue);
          }
       }
    }
    
  2. Подключите обработчик событий к событию.

    Поместите следующий код либо в обработчике события Load формы, либо в ее конструкторе.

    ' Assumes the grid is bound to a dataset called customersDataSet1
    ' with a table called Customers.
    ' Put this code in the form's Load event or its constructor.
    AddHandler customersDataSet1.Tables("Customers").ColumnChanging, AddressOf Customers_ColumnChanging
    
    // Assumes the grid is bound to a dataset called customersDataSet1
    // with a table called Customers.
    // Put this code in the form's Load event or its constructor.
    customersDataSet1.Tables["Customers"].ColumnChanging += new DataColumnChangeEventHandler(this.Customers_ColumnChanging);
    
    // Assumes the grid is bound to a dataset called customersDataSet1
    // with a table called Customers
    // Put this code in the form's Load event or its constructor.
    customersDataSet1.get_Tables().get_Item("Customers").add_ColumnChanging(
       new DataColumnChangeEventHandler(this.Customers_ColumnChanging));
    

См. также

Ссылки

DataGrid

ColumnChanging

SetColumnError

Другие ресурсы

Элемент управления DataGrid (Windows Forms)