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

Замечание

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

Для элемента управления DataGrid Windows Forms доступно два типа проверки входных данных. Если пользователь пытается ввести значение, которое является недопустимым типом данных для ячейки, например строкой в целое число, то новое недопустимое значение заменяется старым значением. Такая проверка входных данных выполняется автоматически и не может быть настроена.

Другой тип проверки входных данных можно использовать для отклонения любых неприемлемых данных, например 0 в поле, которое должно быть больше или равно 1, или неуместной строке. Это делается в наборе данных путем записи обработчика событий для события ColumnChanging или RowChanging. В приведенном ниже примере используется событие ColumnChanging, так как недопустимое значение запрещено для столбца Product, в частности. Вы можете использовать событие RowChanging для проверки того, что значение столбца End 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 contains 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);
          }
       }
    }
    
  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);
    

См. также