2010-12-02 25 views
0

J'ai certaines DataGridViews affichant chacune un DataTable d'un DataSet avec plusieurs DataTables. Lors de l'ajout d'une nouvelle ligne à DataGridView et de son enregistrement dans le DataSet, les colonnes bool ont une valeur System.DBNull qui provoque une exception plus tard (lors de la lecture du DataSet dans une autre application). Ce n'est que si les cases à cocher de ma colonne booléenne sont cochées puis décochées, que la valeur false est valide lors de la sauvegarde du DataSet.Comment éviter System.DBNull dans DataTable à partir de DataGridView lors de l'enregistrement des modifications?

Comment puis-je m'assurer que les colonnes de la case à cocher ont toujours la valeur par défaut false lors de leur ajout à mon DataGridView ou de leur enregistrement?

Répondre

0

Dans le concepteur DataSet vous pouvez sélectionner une colonne DataTable et définir AllowDBNull false et DefaultValue False. De cette façon, la valeur sera false plutôt que DBNull.

+0

La définition de la propriété 'AllowDBNull' sur false n'introduira pas de valeur false dans la colonne, mais lancera une exception si un 'DBNULL' est tenté d'être inséré. – PedroC88

1

Utilisez-vous des procédures stockées? Si c'est le cas, vous pouvez définir la valeur par défaut ou définir une valeur par défaut pour la colonne dans la base de données.

Une autre voie serait d'attribuer la propriété DefaultValue du DataTable.Column

Vous utilisez la propriété DefaultValue de l'objet DataColumn.

' Set default values. ' 
With myDataSet.Tables("Orders") 
    .Columns("Order_Date").DefaultValue = Today 
    .Columns("Quantity").DefaultValue = 1 
    . . . 
End With 

' Add the new row. ' 
Dim aNewRow As DataRow = myDataSet.Tables("Orders").NewRow 
myDataSet.Tables("Orders").Rows.Add(aNewRow) 

Vous pouvez également spécifier les valeurs à chaque fois que vous ajoutez une ligne:

' Create a new row, set its values and add it. ' 
Dim aNewRow As DataRow = myDataSet.Tables("Orders").NewRow 

With myDataSet.Tables("Orders") 
    .Columns("Order_Date") = Today 
    .Columns("Quantity") = 1 
    . . . 
    .Rows.Add(aNewRow) 
End With