web-dev-qa-db-fra.com

VB.NET: Clear DataGridView

J'ai essayé -

DataGridView1.DataSource=Nothing

et

DataGridView1.DataSource=Nothing
DataGridView1.Refresh()

et

DataGridView1.RefreshEdit()

Aucun d'entre eux ne fonctionne ..

J'ai écrit une méthode qui définit le DataSource du DataGridView lorsqu'il est exécuté. mais chaque fois que je l'exécute, il réplique les données avec une nouvelle valeur et les ajoute au contenu précédent du DGV. Je veux effacer le contenu, puis ajouter les valeurs .. Est-ce possible?

21
Bibhas Debnath

Si le DataGridView est lié à une source de données, vous devez définir la propriété DataSource du DataGridView sur Nothing.

Si le DataGridView n'est lié à aucune source de données, ce code fera l'affaire:

DataGridView.Rows.Clear()
60
Alex Essilfie

Pour les cas non liés, notez que:

DataGridView.Rows.Clear()

laisse la collection Columns en place.

DataGridView.Columns.Clear()

..will supprimer toutes les colonnes et les lignes. Si vous utilisez le fichier DGV non lié et que, lors de la prochaine utilisation, les colonnes sont modifiées, l'effacement des lignes peut ne pas être adéquat. Pour le code de bibliothèque, effacez toutes les colonnes avant d'ajouter des colonnes.

9
rheitzman

J'utiliserais probablement ceci ...

DataGridView1.Rows.Clear()

pour effacer les lignes, puis relier.

8
Jason Punyon

Suivez le chemin facile comme ça

supposons que ta est une DataTable

ta.clear()
DataGridView1.DataSource = ta
DataGridView1.DataSource = Nothing
2
Nal MEN

J'ai trouvé que définir la source de données sur null supprime les colonnes. C'est ce qui fonctionne pour moi:

c #:

((DataTable)myDataGrid.DataSource).Rows.Clear();

VB:

Call CType(myDataGrid.DataSource, DataTable).Rows.Clear()
1
Ron Rebennack

Ne faites rien sur DataGridView, effacez simplement la source de données. J'ai essayé d'effacer la méthode myDataset.clear(), puis cela a fonctionné.

1
user3717731

Pour supprimer l'ancien enregistrement dans datagridview lorsque vous recherchez un nouveau résultat, avec l'événement button_click, écrivez le code suivant,

me.DataGridview1.DataSource.clear ()

ce code aidera à supprimer l'ancien enregistrement dans datagridview.

1
karthikeyan

Ne pouvez-vous pas lier datagridview à une collection vide (au lieu de null)? C'est le truc?

1
FiveTools

Mon DataGridView est également lié à une source de données et myDataGridView.Columns.Clear() fonctionnait correctement, mais myDataGridView.Rows.Clear() ne fonctionnait PAS. Juste un FYI pour ceux qui ont essayé .Rows.

1
leoraelkins

Utilisez ce code lorsque vous souhaitez implémenter la commande clear datagridview

datagridview1.datasource= nothing
datagridview1.datasource= ds
dt.clear()               'Dt as new DATATABLE
ds.clear()              'Ds as new Dataset

ce code effacera le datagridview et arrêtera la duplication de données lors du remplissage des données de la base de données.

0
D.Bhardwaj

J'ai eu le même problème lors de la suppression du contenu de gridview. La source de données que j'ai utilisée était un datatable ne comportant pas de colonnes, et j'ai ajouté des colonnes et des lignes par programme à datatable. Ensuite, liez-vous à datagridview. J'ai essayé le code lié à gridview comme gridView.Rows.Clear(), gridView.DataSource = Nothing

mais cela n'a pas fonctionné pour moi. Ensuite, essayez le code ci-dessous associé à datatable avant de le lier à datagridview à chaque fois.

  dtStore.Rows.Clear()
  dtStore.Columns.Clear()
  gridView.DataSource = dtStore

Et fonctionne bien, pas de réplication dans DataGridView

0
Shaheed Muhammad

J'ai eu le même problème: je liais par programme mon GridView1 à une table SQL [dictonary] ou un autre [meny] MAIS lorsque j'ai sélectionné la deuxième table de mon RadioButtonList1, je recevais une erreur (System.Web.HttpException: Champ ou propriété avec le titre [le titre de la première colonne de la table précédemment sélectionnée] n'a pas été trouvé dans la source de données sélectionnée.) C'est-à-dire que les colonnes de ma première table sélectionnée sont introuvables. Tout ce que j'avais à faire était d'insérer:

GridView1.Columns.Clear()

avant d'ajouter les colonnes du tableau. Voici le code complet:

Dim connectionString As String = "your-string-details"
Dim connection As New SqlConnection(connectionString)

Puis vient votre premier sous-marin:

Private Sub BindOrders()
    connection.Open()

    Dim sqlCommand As String = "SELECT * FROM [dictionary]" 
    Dim dataAdapter As New SqlDataAdapter(sqlCommand, connection)
    Dim dt As New DataTable() 
    dataAdapter.Fill(dt)

    GridView1.Columns.Clear() ' clear columns before adding new ones

    If GridView1.Columns.Count <= 0 Then
        Dim Field As New BoundField()
        Field.DataField = "id"
        Field.HeaderText = "id"
        GridView1.Columns.Add(Field)

        Field = New BoundField()
        Field.DataField = "strArHundreds"
        Field.HeaderText = "strArHundreds"
        GridView1.Columns.Add(Field)

        Field = New BoundField()
        Field.DataField = "strArTens"
        Field.HeaderText = "strArTens"
        GridView1.Columns.Add(Field)

        Field = New BoundField()
        Field.DataField = "strArSingles"
        Field.HeaderText = "strArSingles"
        GridView1.Columns.Add(Field)
    End If

    GridView1.DataSource = dt
    GridView1.DataBind()

    connection.Close()
End Sub

Puis vient votre deuxième sous-marin:

Private Sub BindDocuments()
    connection.Open()

    Dim sqlCommand As String = "SELECT * FROM [meny]"
    Dim dataAdapter As New SqlDataAdapter(sqlCommand, connection)
    Dim dt As New DataTable()

    dataAdapter.Fill(dt)

    GridView1.Columns.Clear() ' clear columns before adding new ones

    If GridView1.Columns.Count <= 0 Then
        Dim Field As New BoundField
        Field = New BoundField
        Field.DataField = "id"
        Field.HeaderText = "id"
        GridView1.Columns.Add(Field)

        Field = New BoundField
        Field.DataField = "nazev"
        Field.HeaderText = "nazev"
        GridView1.Columns.Add(Field)
    End If

    GridView1.DataSource = dt
    GridView1.DataBind()

    connection.Close()
End Sub

Vient enfin votre RadioButton:

Protected Sub RadioButtonList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles RadioButtonList1.SelectedIndexChanged
    Dim index As Integer
    index = RadioButtonList1.SelectedIndex
    Select Case index
        Case 0
            BindOrders()
            Exit Select
        Case 1
            BindDocuments()
            Exit Select
    End Select
End Sub

Pour terminer, voici le code de GridView1 et de RadioButtonList1 dans le fichier aspx.file associé:

<asp:RadioButtonList ID="RadioButtonList1"
    runat="server"
    AutoPostBack="True"
    OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged">
    <asp:ListItem>Obraty</asp:ListItem>
    <asp:ListItem>Dokumenty</asp:ListItem>
</asp:RadioButtonList>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
</asp:GridView>

Tout cela fonctionne bien maintenant. 

0
Barbora

écris juste ceci 

DataGridView1.DataSource = ""
0
Areej Qasrawi

Vous devez supprimer la table de l'ensemble de données si la grille de données est liée à un type de données. Votre Gridview sera effacé automatiquement. Pas d'autre chemin.

[YourDatasetName].Tables.Clear()
0
Samiran Nath

Lorsque vous insérez des informations provenant d'une requête SQL dans une vue datagridview, vous pouvez d'abord effacer la vue datagridview avant de la recharger.

Lorsque j'ai défini dbDataSet en tant que New DataTable, je peux effectuer un nettoyage clair . DbDataSet doit figurer au début du formulaire dans le formulaire de classe publique

Dim dbDataset AS New DataTable

dans le code de votre privé Sub, place

dbDataSet.Clear()
0
user3741825

Si la variable GridView (Dites que le nom est gvArchive) est liée à une variable DataSource, les éléments suivants l'effacent:

gvArchive.DataSource = Nothing

gvArchive.DataBind()
0
Neil
Dim DS As New DataSet

DS.Clear() - DATASET clear fonctionne mieux que DataGridView.Rows.Clear() pour moi:

Public Sub doQuery(sql As String)
   Try
        DS.Clear()  '<-- here
        '   - CONNECT -
        DBCon.Open()
        '   Cmd gets SQL Query
        Cmd = New OleDbCommand(sql, DBCon)
        DA = New OleDbDataAdapter(Cmd)
        DA.Fill(DS)
        '   - DISCONNECT -
        DBCon.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
0
Michał R

L'erreur que vous faites est que vous semblez utiliser un objet de jeu de données pour stocker vos données. Chaque fois que vous utilisez le code suivant pour mettre des données dans votre jeu de données, vous ajoutez des données aux données déjà présentes dans votre jeu de données.

myDataAdapter.Fill(myDataSet)

Si vous affectez la table de votre ensemble de données à un objet DataGridView de votre programme à l'aide du code suivant, vous obtiendrez des résultats en double car vous n'avez pas effacé les données qui résident déjà dans votre ensemble de données et dans votre table.

myDataGridView.DataSource = myDataSet.Tables(0)

Pour éviter de répliquer les données, vous devez appeler la méthode clear sur votre objet dataset.

myDataSet.clear()

Ensuite, affectez la table de votre ensemble de données à votre objet DataGridView . Le code est comme ceci.

myDataSet.clear()
myDataAdapter.Fill(myDataSet)
myDataGridView.DataSource = myDataSet.Tables(0)

Vous pouvez essayer ce code:

' clear previous data
DataGridView2.DataSource = Nothing
DataGridView2.DataMember = Nothing
DataGridView2.Refresh()
Try
    connection.Open()
    adapter1 = New SqlDataAdapter(sql, connection)
    ' clear data already in the dataset
    ds1.Clear()
    adapter1.Fill(ds1)
    DataGridView2.DataSource = ds1.Tables(0)
    connection.Close()
Catch ex As Exception
    MsgBox(ex.ToString)
End Try
0
Meisam Rasouli

1) Le bouton Créer le nomme Clear.Inside insère le code suivant Datagridviewer.DataSource = Nothing

2) Dans votre bouton de recherche, commencez votre code par la déclaration suivante

datagridviewer.DataSource = DataSet.table

Nb: au lieu de table, indiquez le nom réel de votre table Ex: datagridviewer.DataSource = DataSet.client

0
Limanidt

Si le DataGridView est lié à une source de données,

DataGridView1.DataSource = Nothing
DataGridView1.DataBind()
0
SUHAIL AG

Vous pouvez avoir un scénario utilisateur tel que vous souhaitez conserver la liaison de données et effacer temporairement uniquement le DataGridView. Par exemple, vous demandez à l'utilisateur de cliquer sur une installation sur une carte pour afficher ses attributs pour l'édition. Il clique pour la première fois ou a déjà cliqué sur l'un d'entre eux et l'a édité. Lorsque l'utilisateur clique sur le bouton "Sélectionner une installation", vous souhaitez effacer le DataGridView des données de l'installation précédente (et ne pas générer d'erreur s'il s'agit de sa première sélection). Dans ce scénario, vous pouvez obtenir le DataGridView pur en adaptant le code généré qui remplit le DataGridView. Supposons que le code généré ressemble à ceci:

    Try
        Me.Fh_maintTableAdapter.FillByHydrantNumber(Me.Fh2010DataSet.fh_maint, hydrantNum)
    Catch ex As System.Exception
        System.Windows.Forms.MessageBox.Show(ex.Message)
    End Try

Nous remplissons le DataGridView en fonction du numéro de la bouche d'incendie. Copiez ce code au point où vous souhaitez effacer le DataGridView et remplacez la valeur "hydrantNum" qui, selon vous, ne permettra de récupérer aucune donnée. La grille va effacer. Et lorsque l'utilisateur sélectionne réellement une installation (dans ce cas, une bouche d'incendie), la liaison est en place pour remplir DataGridView de manière appropriée.

0
Charlie Marlin

J'ai ce code fonctionnant sous une forme Windows,

Public Class Form1

    Private dataStuff As List(Of String)


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        DataGridView1.DataSource = Nothing

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        dataStuff = New List(Of String)

        dataStuff.Add("qwerty")
        dataStuff.Add("another")
        dataStuff.Add("...and another")

        DataGridView1.DataSource = dataStuff
    End Sub
End Class
0
bristows