Sdílet prostřednictvím


Postupy: Ověření vstupu pomocí ovládacího prvku Windows Forms DataGrid

Poznámka:

Ovládací prvek DataGridView nahrazuje a přidává funkce do ovládacího prvku DataGrid; ovládací prvek DataGrid je však zachován pro zpětnou kompatibilitu i budoucí použití, pokud zvolíte. Další informace naleznete v tématu Rozdíly mezi ovládacím prvkem Windows Forms DataGridView a ovládacím prvkem DataGrid.

Pro ovládací prvek Windows Forms DataGrid jsou k dispozici dva typy ověřování vstupu. Pokud se uživatel pokusí zadat hodnotu, která je nepřijatelného datového typu pro buňku, například řetězec do celého čísla, bude nová neplatná hodnota nahrazena starou hodnotou. Tento typ ověřování vstupu se provádí automaticky a nelze ho přizpůsobit.

Druhý typ ověření vstupu lze použít k odmítnutí všech nepřijatelných dat, například 0 hodnoty v poli, které musí být větší nebo rovno 1, nebo nevhodný řetězec. Toto se provádí v datové sadě napsáním obslužné rutiny pro událost ColumnChanging nebo RowChanging. Následující příklad používá událost ColumnChanging, protože nepřijatelná hodnota je zakázána konkrétně pro sloupec "Product". Událost RowChanging můžete použít ke kontrole, jestli je hodnota sloupce Koncové datum pozdější než sloupec Počáteční datum ve stejném řádku.

Ověření uživatelského vstupu

  1. Napište kód pro zpracování ColumnChanging události pro příslušnou tabulku. Při zjištění nevhodného vstupu zavolejte metodu SetColumnError objektu 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. Připojte obslužnou rutinu události k události.

    Do Load události formuláře nebo jeho konstruktoru umístěte následující kód.

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

Viz také