• Aucun résultat trouvé

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.