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