Aracılığıyla paylaş


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

Dekont

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

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

Diğer giriş doğrulama türü, kabul edilemez verileri reddetmek için kullanılabilir; örneğin, 1'den büyük veya buna eşit olması gereken bir alandaki 0 değeri ya da uygunsuz bir dize. Bu, veya RowChanging olayı için bir olay işleyicisi yazılarak veri kümesinde ColumnChanging gerçekleştirilir. Özellikle "Product" sütunu için kabul edilemez değere izin verilmediğinden, aşağıdaki örnekte olay kullanılır ColumnChanging . "Bitiş Tarihi" sütununun değerinin aynı satırdaki "Başlangıç Tarihi" sütunundan daha sonra olup olmadığını denetlemek için olayını kullanabilirsiniz RowChanging .

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

  1. Uygun tablo için olayı işlemek ColumnChanging için kod yazın. Uygunsuz giriş algılandığında nesnesinin SetColumnError yöntemini çağırın 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. Olay işleyicisini olaya Bağlan.

    Aşağıdaki kodu formun Load olayına veya oluşturucusunun içine yerleştirin.

    ' 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.