VB.NET: Clear DataGridView
j'ai essayé
DataGridView1.DataSource=Nothing
et
DataGridView1.DataSource=Nothing
DataGridView1.Refresh()
et
DataGridView1.RefreshEdit()
aucun ne fonctionne..
j'ai écrit une méthode qui définit la source de données de DataGridView lorsqu'elle est exécutée. mais chaque fois que je l'exécute, il reproduit les données avec une nouvelle valeur et l'ajoute au contenu précédent de la DGV.. Je veux clarifier le contenu et ajouter les valeurs.. Est-ce possible?
25 réponses
si la DataGridView est liée à n'importe quelle source de données, vous devrez définirDataSource
propriété Nothing
.
si le DataGridView N'est lié à aucune source de données, ce code fera l'affaire:
DataGridView.Rows.Clear()
Je l'utiliserais probablement...
DataGridView1.Rows.Clear()
pour effacer les lignes et puis les relier.
pour les cas non liés, veuillez noter que:
DataGridView.Rows.Clear()
laisse la collection de colonnes en place.
DataGridView.Columns.Clear()
..va supprimer toutes les colonnes et les lignes. Si vous utilisez le DGV non lié, et sur l'utilisation suivante les colonnes changent, le dégagement des lignes peut ne pas être adéquat. Pour le code de bibliothèque effacer toutes les colonnes avant d'ajouter des colonnes.
suivre la voie facile comme ceci
supposons que ta
est un DataTable
ta.clear()
DataGridView1.DataSource = ta
DataGridView1.DataSource = Nothing
Pouvez-vous ne pas lier le datagridview à un vide de collecte (au lieu de null). Que faire l'affaire?
pour supprimer l'ancien enregistrement dans datagridview lorsque vous recherchez un nouveau résultat,avec l'événement button_click écrivez le code suivant,
moi.DataGridview1.Source de données.claire()
ce code aidera à supprimer l'ancien enregistrement dans datagridview.
j'ai trouvé que définir la source de données à 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()
ce code fonctionne sous 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
Vous devriez supprimer la table de dataset si le datagrid est lié à quelque datatable. Votre Gridview sera effacé automatiquement. Pas d'autre moyen.
[YourDatasetName].Tables.Clear()
j'ai eu le même problème sur gridview contenu de compensation. La source de données que j'ai utilisée était un datatable n'ayant pas de colonnes, et j'ai ajouté des colonnes et des lignes programmatiques à datatable. Alors se lier à datagridview. J'ai essayé le code en rapport avec gridview comme gridView.Rows.Clear()
,gridView.DataSource = Nothing
mais ça n'a pas marché pour moi. Ensuite, essayez le code ci-dessous lié à datatable avant de le lier à datagridview à chaque fois.
dtStore.Rows.Clear()
dtStore.Columns.Clear()
gridView.DataSource = dtStore
Et fonctionne très bien, pas de réplication dans DataGridView
1) bouton create nommé Clear.À l'intérieur d'insérer tfhe code suivant datagridviewer.Source de données=rien
2) dans votre bouton de recherche, Commencez votre code par l'énoncé suivant
datagridviewer.DataSource = DataSet.la table
Nb: au lieu de table mettre le nom réel de votre table ex: datagridviewer.DataSource = DataSet.client
lors de l'alimentation d'informations à partir d'une requête SQL dans un datagridview, vous pouvez effacer le datagridview avant de le recharger.
où j'ai défini dbDataSet Comme Nouveau DataTable je peux faire un clair. dbDataSet doit être au début du formulaire dans la classe publique formulaire
Dim dbDataset AS New DataTable
dans le code de votre sous-marin privé, place
dbDataSet.Clear()
Vous pouvez avoir un scénario utilisateur tel que vous voulez garder la liaison de données et seulement temporairement effacer le DataGridView. Par exemple, vous demandez à l'utilisateur de cliquer sur une installation sur une carte pour montrer ses attributs pour l'édition. Il clique pour la première fois, ou il a déjà cliqué sur un et l'a modifié. Lorsque l'utilisateur clique sur le bouton "Select Facility", vous souhaitez effacer le DataGridView des données de la facilité précédente (et ne pas jeter une erreur si c'est sa première sélection). Dans dans ce scénario, vous pouvez obtenir le propre DataGridView 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 basé sur le numéro de la bouche d'incendie. Copiez ce code au point où vous voulez effacer le DataGridView et substituez une valeur pour "hydrantNum" que vous savez ne récupérera pas de données. La grille sera clair. Et lorsque l'utilisateur sélectionne une installation (dans ce cas, une borne d'incendie), la la liaison est en place pour remplir le DataGridView de manière appropriée.
si la DataGridView est liée à n'importe quelle source de données,
DataGridView1.DataSource = Nothing
DataGridView1.DataBind()
Mon DataGridView est également lié à une source de données et myDataGridView.Columns.Clear()
a bien fonctionné mais myDataGridView.Rows.Clear()
n'a PAS. Juste une pour info pour ceux qui ont essayé .Rows
.
Dim DS As New DataSet
DS.Clear()
- ensemble de données 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
Si le GridView
(dites que le nom est gvArchive
) est lié à tout DataSource
la suite est clair:
gvArchive.DataSource = Nothing
gvArchive.DataBind()
Ne pas faire n'importe quoi sur DataGridView
, il suffit d'effacer la source des données. J'ai essayé de compensation myDataset.clear()
méthode, puis ça a marché.
j'ai eu le même problème: j'ai relié programmatiquement mon GridView1 à une table SQL [dictonary] ou une autre [meny] mais quand j'ai sélectionné la deuxième table de ma RadioButtonList1, j'ai eu une erreur (système.Web.HttpException: le champ ou la 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 en disant que les colonnes de mon premier tableau sélectionné ne pouvaient pas être trouvées. Tout ce que j'avais à faire était de 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:
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
vient Ensuite votre deuxième Sous:
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 de 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 compléter, voici le code pour le GridView1 et le RadioButtonList1 dans l'aspx associé.fichier:
<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.
l'erreur que vous faites est que vous semblez utiliser un objet dataset pour stocker vos données. Chaque fois que vous utilisez le code suivant pour mettre des données dans votre ensemble de données, vous ajoutez des données aux données déjà dans votre ensemble de données.
myDataAdapter.Fill(myDataSet)
si vous assignez la table dans votre ensemble de données à un objet DataGridView dans votre programme par le code suivant, vous obtiendrez des résultats dupliqués parce que vous n'avez pas effacé les données qui résident déjà dans votre ensemble de données et dans votre ensemble de données 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()
puis assignez la table dans votre ensemble de données à votre objet DataGridView. Le code est comme ça.
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
Vous pouvez le faire de cette façon:
DataGridView1.Enable = false
DataGridView1.DataSource = Nothing
DataGridView1.Enable = true
pour les données Clear of Grid View vous devez effacer l'ensemble de données ou Datatable
j'utilise ce Code j'efface les données de vue de grille même si re soumettre encore et encore il fonctionnera Exemple Dim con As New OleDbConnection Le cmd Dim en tant que nouveau Command Dim da en tant que nouvel OleDbDataAdapter Dim dar As Oldbdatareader Dim dt Comme Nouveau DataTable Si (con.État <> 1) Alors con.Ouvrir() Fin De Si dt.Clear () ' pour effacer les données à chaque fois à des données fraîches cmd.Connexion = con cmd.CommandText = " select * from users" da.SelectCommand = cmd da.De remplissage(dt) DataGridView1.Source de données = dt DataGridView1.Visible = True
cmd.Dispose()
con.Close()
Vous pouvez le faire seulement par les 2 lignes suivantes:
DataGridView1.DataSource=Nothing
DataGridView1.DataBind()
Vous pouvez aussi essayer ce code si vous voulez effacer toutes les données de votre DataGridView
DataGridView1.DataSource.Clear()