En outre des méthodes habituelles des collections ADO.NET, cette collection possède deux méthodes spécifiques Find et InsertAt.
Add
Permet l'ajout d'une ligne à la collection, soit en passant un objet DataRow, soit avec un tableau de valeurs.
Find
Permet une recherche d'une ligne par la valeur de sa clé primaire. Il n'est pas possible de spécifier un champ pour la recherche. Si la clé primaire est composée de plusieurs champs, vous devez passer un tableau de valeurs à la méthode
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim strConn, strSQL As String
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\tutoriel\biblio.mdb;"
strSQL = "SELECT * FROM Authors"
Dim MonDA As New OleDbDataAdapter(strSQL, strConn) Dim MonDataset As New DataSet("Auteurs")
MonDA.Fill(MonDataset)
MonDataset.Tables(0).Constraints.Add("pk1", MonDataset.Tables(0).Columns(0), True)
Dim MaLigne As DataRow = MonDataset.Tables(0).Rows.Find("1") MessageBox.Show(MaLigne.Item(1))
strSQL = "SELECT * FROM [Title Author]" MonDA.SelectCommand.CommandText = strSQL Dim Matable As New Data.DataTable
MonDA.Fill(Matable)
Matable.Constraints.Add("pk", New DataColumn() {Matable.Columns(0), Matable.Columns(1)}, True)
MonDataset.Tables.Add(Matable)
MaLigne = MonDataset.Tables(1).Rows.Find(New Object() {"0- 0133656-1-4", "1454"})
If Not MaLigne Is Nothing Then MessageBox.Show("Reussie") End Sub
InsertAt
Permet l'insertion à une position spécifique dans la collection.
Public Sub InsertAt(ByVal row As DataRow, ByVal pos As Integer)
Attention, cette méthode ne fonctionne pas pour un tableau d'objet DataRow mais uniquement pour un objet DataRowCollection. N'oubliez pas non plus que la notion de position de ligne n'a pas de sens pour un SGBD. Celle-ci n'a d'importance que pour l'écriture d'un fichier XML ou pour la navigation dans votre collection.
U
Propriétés de l'objet DataRow
HasErrors (Booléen)
Indique si la ligne contient un message d'erreur. Cette propriété est en lecture seule mais vous pouvez la modifier en jouant sur la propriété RowError.
Item (Object)
Surchargée. Permet de récupérer la valeur d'un champ de la ligne en spécifiant éventuellement la version.
Public Default ReadOnly Property Item(ByVal column As ….., ByVal version As DataRowVersion)
As Object
Le paramètre column peut être l'objet DataColumn, la position ordinale ou le nom de la colonne. Pour des raisons de performance, n'utilisez pas le nom de la colonne. Si vous ne précisez pas la version c'est la valeur courante qui est renvoyée.
ItemArray (Object())
Renvoie ou définit un tableau d'objet contenant les valeurs de tous les champs de la ligne. Cette méthode ne possède pas de surcharge permettant de spécifier la version. Lors de l'utilisation de cette méthode pour modifier une ligne, passez des paramètres Nothing pour obtenir les valeurs AutoIncrement ou par défaut d'une colonne.
RowError (String)
Définit ou obtient le texte d'un message d'erreur affecté à la ligne.
RowState (DataRowState)
Lecture seule. Obtient l'état de la ligne spécifiée. Voici un petit exemple de manipulation de ligne. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim strConn, strSQL As String
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\tutoriel\biblio.mdb;"
strSQL = "SELECT * FROM Authors"
Dim MonDA As New OleDbDataAdapter(strSQL, strConn) Dim MonDataset As New DataSet("Auteurs")
MonDA.Fill(MonDataset)
Dim MaTable As Data.DataTable = MonDataset.Tables(0) With MaTable With .Columns(0) .AutoIncrement = True .AutoIncrementSeed = -1 .AutoIncrementStep = -1 End With .Constraints.Add("pk1", MonDataset.Tables(0).Columns(0), True) .BeginLoadData()
.LoadDataRow(New Object() {1, "Rabilloud", 1967}, False) .EndLoadData()
Dim maLigne As DataRow = .NewRow
maLigne.ItemArray = New Object() {Nothing, "Mezigue", 1930} .Rows.Add(maLigne)
maLigne = .Rows.Find(10) maLigne.Delete()
End With
Dim TabLigne() As DataRow = MaTable.Select("", "", DataViewRowState.Added Or DataViewRowState.Deleted Or DataViewRowState.ModifiedCurrent)
MessageBox.Show(TabLigne.GetLength(0)) End Sub
Méthode de DataRow
AcceptChanges
Valide les modifications en attente sur la ligne. Si la propriété RowState de la ligne était Added ou Modified, elle devient Unchanged. Si la propriété RowState est Deleted, la ligne est supprimée. Fait aussi un appel implicite de la méthode EndEdit. Attention cela n'induit pas un quelconque envoi des modifications vers la source de données. Prenons le cas suivant
Dim MaTable As Data.DataTable = MonDataset.Tables(0) With MaTable
.Constraints.Add("pk1", MonDataset.Tables(0).Columns(0), True) Dim maLigne As DataRow = .NewRow
maLigne.ItemArray = New Object() {-1, "Mezigue", 1930} .Rows.Add(maLigne)
.AcceptChanges()
MessageBox.Show(maLigne.RowState.ToString) End With
Dans ce cas, lors de l'appel de la mise à jour, la ligne quoique récemment ajoutée, sera marquée comme étant inchangée. Dès lors elle ne sera pas envoyée vers la source de données.
BeginEdit, CancelEdit & EndEdit
Ces méthodes permettent de procéder à la modification des lignes en mode édition. Les contrôles dépendants utilisent toujours ce principe. L'utilisation du mode édition n'est jamais imposée mais elle permet de suspendre les opérations de validation et les événements de changement jusqu'à l'appel de la méthode EndEdit.
Dim MaTable As Data.DataTable = MonDataset.Tables(0) Dim maligne As DataRow = MaTable.Rows(0)
maligne.BeginEdit()
maligne.Item(1) = InputBox("Entrez le nouveau nom", "Saisie", maligne.Item(1))
If Len(maligne.Item(1, DataRowVersion.Proposed)) > 0 Then maligne.EndEdit() Else maligne.CancelEdit()
ClearErrors
Efface toutes les erreurs de la ligne qu'elles soient ou non affectées à un champ.
Delete
Marque une ligne comme 'Deleted'. Si l'état de la ligne était 'Added' la ligne est définitivement supprimée. Une ligne marquée 'Deleted' peut être restaurée par l'appel de la méthode RejectChanges.
GetChildRows & GetParentRows
Permet la récupération des lignes dans un tableau de DataRow au travers d'une relation spécifiée. Accepte un paramètre pour préciser la version de la ligne désirée.
Public Function GetChildRows(ByVal relation As DataRelation, ByVal version As
DataRowVersion) As DataRow()
Le paramètre relation peut être aussi défini par son nom.
GetColumnError
Public Function GetColumnError(ByVal column As DataColumn) As String
Permet de récupérer l'erreur d'une colonne spécifiée de la ligne. Le paramètre colonne peut être aussi passé comme nom ou comme position ordinale.
GetColumnsInError
Renvoie un tableau de DataColumn contenant les colonnes en erreurs de la ligne. Regardons l'exemple suivant de gestion d'erreurs.
Dim MaTable As Data.DataTable = MonDataset.Tables(0) Dim maLigne As DataRow = MaTable.Rows(0)
If maLigne.HasErrors Then
Dim TabErrCol() As DataColumn = maLigne.GetColumnsInError Dim MaColonne As DataColumn
For Each MaColonne In TabErrCol
MessageBox.Show(maLigne.GetColumnError(MaColonne).ToString) Next
maLigne.ClearErrors() End If
HasVersion
Public Function HasVersion(ByVal version As DataRowVersion) As Boolean
Permet de définir si la version passée en paramètre existe pour la ligne. S'utilise généralement en conjonction avec les méthodes GetChildRows et GetParentRows ou avant l'appel de la propriété Item.
IsNull
Public Function IsNull(ByVal column As DataColumn, ByVal version As DataRowVersion) As
Boolean
Le paramètre colonne peut aussi être la position ordinale ou le nom mais dans ce cas la version ne peut être précisée. Renvoie vrai si la valeur de la colonne est NULL.
RejectChanges
Annule les modifications en attente. Si RowState est 'Deleted' ou 'Modified', les valeurs précédentes de la ligne sont rétablies et RowState devient 'Unchanged'. Si RowState est 'Added', la ligne est supprimée. Appelle aussi CancelEdit implicitement.
SetColumnError
Public Sub SetColumnError(ByVal column As DataColumn, ByVal error As String)
Affecte à la colonne définie en paramètre le texte d'erreur contenu dans la chaîne error.
SetParentRow
Public Sub SetParentRow(ByVal parentRow As DataRow, ByVal relation As DataRelation)
Définit la nouvelle ligne parent de la ligne. Vous n'êtes pas obligé de spécifier la Relation mais je vous conseille vivement de le faire.