Nasıl yapılır: Windows Forms DataGrid Denetimiyle Girişi Doğrulama

Not

Denetim, denetimin yerini alan ve denetime işlevsellik ekler; ancak, siz seçerseniz denetim hem geriye dönük uyumluluk hem de gelecekteki DataGridViewDataGrid kullanım için DataGrid korunur. Daha fazla bilgi için bkz. Windows Forms DataGridView ve DataGrid Denetimleri Arasındaki Farklar.

Windows Forms denetimi için iki tür Windows DataGrid vardır. Kullanıcı hücre için kabul edilemez bir veri türünde bir değer (örneğin, tamsayıya bir dize) girmeye çalışırsa, yeni geçersiz değer eski değerle değiştirilir. Bu tür bir giriş doğrulaması otomatik olarak yapılır ve özelleştirilebilir.

Diğer giriş doğrulaması türü, kabul edilemez verileri reddetmek için kullanılabilir. Örneğin, 1'den büyük veya 1'e eşit olması gereken bir 0 değeri veya uygun olmayan bir dize. Bu, veya olayı için bir olay işleyicisi yazarak veri ColumnChanging kümesinde RowChanging yapılır. "Product" sütunu için kabul edilemez değere özellikle izin verilmey olduğundan aşağıdaki ColumnChanging örnekte olayı lanmıştır. Bir RowChanging "Bitiş Tarihi" sütun değerinin aynı satırdaki "Başlangıç Tarihi" sütunundan daha geç olduğunu kontrol etmek için olayı kullanabilirsiniz.

Kullanıcı girişini doğrulamak için

  1. Uygun tablo için olayı ColumnChanging işlemek için kod yazın. Uygun olmayan giriş algılandığında SetColumnError nesnesinin yöntemini DataRow çağırabilirsiniz.

    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. Bağlan işleyicisini olayına ekleyin.

    Aşağıdaki kodu formun olayına veya Load oluşturucus una girin.

    ' 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);
    

Ayrıca bkz.