2010-02-07 76 views
18

Ho provato -VB.NET: Cancella DataGridView

DataGridView1.DataSource=Nothing 

e

DataGridView1.DataSource=Nothing 
DataGridView1.Refresh() 

e

DataGridView1.RefreshEdit() 

Nessuno di loro lavora ..

ho scritto un metodo che imposta il DataSource di DataGridView quando viene eseguito. ma ogni volta che lo eseguo, replica i dati con un nuovo valore e lo aggiunge ai contenuti precedenti del DGV. Voglio cancellare il contenuto e quindi aggiungere i valori .. È possibile?

risposta

56

Se il DataGridView è associato a qualsiasi origine dati, si dovrà impostare la proprietà del DataGridView DataSource-Nothing.

Se il DataGridView non è tenuto a qualsiasi fonte di dati, questo codice farà il trucco:

DataGridView.Rows.Clear() 
7

probabilmente sarei uso questo ...

DataGridView1.Rows.Clear() 

per cancellare le righe e quindi associare nuovamente.

+3

Si dice che non può cancellare questa lista .. È perché sto usando una tabella di database come origine dati? –

1

Impossibile associare il datagridview a una raccolta vuota (anziché null). Questo fa il trucco?

0

Ho questo codice di lavoro in una forma finestre,

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

È necessario rimuovere la tabella dal set di dati se il datagrid si legano ad alcuni datatable. Il tuo Gridview verrà cancellato automaticamente. Nessun altro modo.

[YourDatasetName].Tables.Clear() 
+0

Cosa aggiunge la tua risposta alla risposta già accettata? – Yaroslav

-1

È possibile farlo in questo modo:

DataGridView1.Enable = false 
DataGridView1.DataSource = Nothing 
DataGridView1.Enable = true 
2

Seguire la via più facile in questo modo

scontato che ta è un DataTable

ta.clear() 
DataGridView1.DataSource = ta 
DataGridView1.DataSource = Nothing 
8

Per i casi non legati notare che:

DataGridView.Rows.Clear() 

lascia la raccolta di colonne sul posto.

DataGridView.Columns.Clear() 

.. rimuove tutte le colonne e le righe. Se si utilizza il DGV non associato e al prossimo utilizzo le colonne cambiano, la cancellazione delle righe potrebbe non essere adeguata. Per il codice della libreria deselezionare tutte le colonne prima di aggiungere colonne.

1

Per rimuovere il vecchio record in datagridview quando si è alla ricerca di nuovo risultato, con l'evento button click scrivere il codice seguente,

me.DataGridview1.DataSource.clear()

questo codice aiuterà a rimuovere il vecchio record in datagridview.

1

Ho trovato che l'impostazione dell'origine dati su null rimuove le colonne. Questo è ciò che funziona per me:

C#:

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

VB:

Call CType(myDataGrid.DataSource, DataTable).Rows.Clear() 
+0

Pollice su per menzionare un problema comune, che altre risposte non rispettano o indirizzano. –

0

Ho avuto lo stesso problema su contenuti compensazione GridView. L'origine dati che ho usato era databile senza colonne e ho aggiunto colonne e righe a livello di codice a datatable. Quindi legare a datagridview. Ho provato il codice relativo a gridview come gridView.Rows.Clear(), gridView.DataSource = Nothing

ma non ha funzionato per me. Quindi provare il seguente codice correlato con datatable prima di legarlo ogni volta a datagridview.

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

e sta lavorando bene, non replica in DataGridView

-1

Per la Chiara di visualizzazione Griglia di dati è necessario cancellare il set di dati o Datatable

Io uso questo codice a cancellare la visualizzazione Griglia di dati anche se ri inviare di nuovo e di nuovo funzionerà Esempio Dim con quanto cmd nuovo OleDbConnection fioco come nuovo OleDbCommand Dim da come nuovo OleDbDataAdapter Dim dar Come OleDbDataReader Dim dt come nuovo DataTable Se (con.State <> 1) Poi con.Open() End If dt.Clear() 'per cancellare i dati Ogni volta che i dati freschi cmd.Connection = con cmd.CommandText = "select * from users" da.SelectCommand = cmd da.Fill (dt) DataGridView1.DataSource = dt DataGridView1.Visible = true

cmd.Dispose() 
    con.Close() 
+0

Grazie per aver contribuito a StackOverflow :). La domanda a cui stai rispondendo è vecchia e ha già risposto: saremo lieti se potrai dare il tuo contributo anche a domande più urgenti. Inoltre, si prega di provare a mantenere la risposta pertinente per l'esempio nella domanda (che non coinvolge alcuna tabella utenti, ad esempio). – Mifeet

0

1) pulsante chiamò Clear.Inside inserire tfhe seguente creare codice datagridviewer.DataSource = nothing

2) Nella tua pulsante di ricerca iniziare il codice dalla seguente dichiarazione

datagridviewer.DataSource = DataSet.table

Nb: al posto del tavolo mettere il vero nome della tabella es: datagridviewer.DataSource = DataSet.client

0

Non fare nulla su DataGridView, basta cancellare l'origine dati. Ho provato a cancellare il metodo myDataset.clear(), poi ha funzionato.

+0

È sempre meglio spiegare perché, non solo cosa fare. – edi9999

0

Quando si alimentano le informazioni da una query SQL in una vista datagrid è possibile cancellare la vista datagrid prima di ricaricarla.

Dove ho definito dbDataSet come New DataTable posso fare un clear. dbDataSet deve essere al via della forma all'interno della forma Public Class

Dim dbDataset AS New DataTable 

all'interno del codice di voi Private Sub, posizionare

dbDataSet.Clear() 
0

Si può avere uno scenario utente in modo tale che si desidera conservare l'associazione dei dati e solo temporaneamente cancellare il DataGridView. Ad esempio, l'utente fa clic su una struttura su una mappa per mostrare i suoi attributi per la modifica. Sta cliccando per la prima volta, o ha già cliccato su uno e modificato. Quando l'utente fa clic sul pulsante "Seleziona struttura", si desidera cancellare il DataGridView dei dati dalla funzione precedente (e non generare un errore se è la sua prima selezione). In questo scenario, è possibile ottenere il pulito DataGridView adattando il codice generato che riempie il DataGridView. Supponiamo che il codice generato assomigli a questo:

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

Stiamo compilando il DataGridView in base al numero di idrante. Copia questo codice nel punto in cui vuoi cancellare il DataGridView e sostituire un valore per "hydrantNum" che sai non recupererà alcun dato. La griglia si cancellerà. E quando l'utente seleziona effettivamente una struttura (in questo caso un idrante), il legame è attivo per riempire correttamente DataGridView.

0

Se il DataGridView è associato a qualsiasi origine dati,

DataGridView1.DataSource = Nothing 
DataGridView1.DataBind() 
0

mio DataGridView è anche legato ad un DataSource e myDataGridView.Columns.Clear() ha funzionato bene, ma myDataGridView.Rows.Clear() non ha fatto. Solo una FYI per coloro che hanno provato .Rows.

0
Dim DS As New DataSet 

DS.Clear() - DATASET chiaro funziona meglio di DataGridView.Rows.Clear() per me:

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

Se il GridView (dicono che il nome è gvArchive) è legata a nessuna DataSource, il seguente cancellarlo:

gvArchive.DataSource = Nothing 

gvArchive.DataBind() 
-1

È possibile farlo solo dalle seguenti 2 righe:

DataGridView1.DataSource=Nothing 
DataGridView1.DataBind() 
0

basta scrivere questo

DataGridView1.DataSource = "" 
+2

Sebbene questo snippet di codice sia benvenuto e possa fornire un aiuto, sarebbe [notevolmente migliorato se includesse una spiegazione] (// meta.stackexchange.com/q/114762) di * come * e * perché * questo risolve il problema problema. Ricorda che stai rispondendo alla domanda per i lettori in futuro, non solo la persona che chiede ora! Si prega di [modificare] la risposta per aggiungere una spiegazione e fornire un'indicazione di quali limitazioni e ipotesi si applicano. –

0

Ho avuto lo stesso problema: sono stato a livello di codice legando il mio GridView1 a una tabella SQL [dictonary] o un altro [meny] ma quando ho scelto la seconda tabella dalla mia RadioButtonList1, Stavo ricevendo un errore (System.Web.HttpException: campo o proprietà con il titolo [il titolo della prima colonna della tabella precedentemente selezionata] non è stato trovato nell'origine dati selezionata.) Cioè dicendo che le colonne della mia tabella selezionata per prima non è stato trovato Tutto quello che dovevo fare era inserire:

GridView1.Columns.Clear() 

prima di aggiungere le colonne della tabella.Qui va il codice completo:

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

Poi viene la tua prima secondaria:

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 

viene Allora la vostra seconda sotto:

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 

finalmente arriva il tuo 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 

Per il completamento, ecco il c ode per la GridView1 e la RadioButtonList1 nella aspx.file associati:

<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> 

Tutto questo funziona bene ora.

0

L'errore che si sta facendo è che sembra che si stia utilizzando un oggetto dataset per la memorizzazione dei dati. Ogni volta che si utilizza il seguente codice per inserire i dati nel set di dati, si aggiungono dati ai dati già presenti nel set di dati.

myDataAdapter.Fill(myDataSet) 

Se si assegna la tabella del set di dati a un oggetto DataGridView nel vostro programma dal seguente codice si ottengono risultati duplicati perché non avete eliminato i dati che è già residente nel set di dati e nella tabella di dati.

myDataGridView.DataSource = myDataSet.Tables(0) 

Per evitare la replica dei dati, è necessario chiamare il metodo clear sul proprio oggetto dataset.

myDataSet.clear() 

Quindi assegnare la tabella nel set di dati all'oggetto DataGridView. Il codice è come questo.

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

Si può provare questo codice:

' 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 
-1

Si può anche provare questo codice se si desidera cancellare tutti i dati nel vostro DataGridView

DataGridView1.DataSource.Clear()