VB.NET: Очистить DataGridView - PullRequest
       198

VB.NET: Очистить DataGridView

22 голосов
/ 07 февраля 2010

Я пробовал -

DataGridView1.DataSource=Nothing

и

DataGridView1.DataSource=Nothing
DataGridView1.Refresh()

и

DataGridView1.RefreshEdit()

Ни один из них не работает ..

Я написал метод, который устанавливает DataSource DataGridView при выполнении. но каждый раз, когда я выполняю его, он копирует данные с новым значением и добавляет его к предыдущему содержимому DGV.

Ответы [ 26 ]

0 голосов
/ 04 сентября 2015
Dim DS As New DataSet

DS.Clear() - Очистка данных работает лучше, чем DataGridView.Rows.Clear() для меня:

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 голосов
/ 10 сентября 2014

Если DataGridView привязан к какому-либо источнику данных,

DataGridView1.DataSource = Nothing
DataGridView1.DataBind()
0 голосов
/ 03 января 2012

Вы должны удалить таблицу из набора данных, если сетка данных привязана к какому-либо объекту данных. Ваш Gridview будет очищен автоматически. Другого пути нет.

[YourDatasetName].Tables.Clear()
0 голосов
/ 07 марта 2018

Вы также можете попробовать этот код, если хотите очистить все данные в вашем DataGridView

DataGridView1.DataSource.Clear()
0 голосов
/ 20 сентября 2017

У меня была та же проблема: я программно связывал свой GridView1 с одной таблицей SQL [dictonary] или другим [meny] НО, когда я выбрал вторую таблицу из моего RadioButtonList1, я получал ошибку (System.Web.HttpException: Поле или свойство с заголовком [заголовок первого столбца из ранее выбранной таблицы] не было найдено в выбранном источнике данных.) То есть, говоря, что столбцы из моей первой выбранной таблицы не могут быть найдены. Все, что мне нужно было сделать, это вставить:

GridView1.Columns.Clear()

перед добавлением столбцов таблицы. Вот полный код:

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

Затем приходит ваш первый Sub:

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

Затем приходит ваш второй Sub:

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

Наконец-то приходит твое 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

Для завершения, вот код для GridView1 и RadioButtonList1 в соответствующем файле aspx.file:

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

Теперь все работает хорошо.

0 голосов
/ 07 марта 2014

1) Создайте кнопку с именем Clear. Внутри вставьте следующий код datagridviewer.DataSource = ничего

2) В поисковой кнопке начните свой код со следующего утверждения

datagridviewer.DataSource = DataSet.table

Nb: вместо таблицы поставьте настоящее имя вашей таблицы например: datagridviewer.DataSource = DataSet.client

0 голосов
/ 24 февраля 2014

Для очистки данных вида сетки Вы должны очистить набор данных или Datatable

Я использую этот код. Я очищаю данные таблицы, даже если повторная отправка снова и снова будет работать пример Dim Con As New OleDbConnection Dim cmd As New OleDbCommand Dim da As New OleDbDataAdapter Дим Дар As OleDbDataReader Dim dt As New DataTable Если (con.State <> 1), то con.Open () End If dt.Clear () 'Очистить данные каждый раз, когда свежие данные cmd.Connection = con cmd.CommandText = "выбрать * из пользователей" da.SelectCommand = cmd da.Fill (дт) DataGridView1.DataSource = dt DataGridView1.Visible = True

    cmd.Dispose()
    con.Close()
0 голосов
/ 28 октября 2013

У меня была такая же проблема при очистке содержимого gridview.Источником данных, который я использовал, была таблица данных без столбцов, и я добавил столбцы и строки программным способом в таблицу данных.Затем свяжите с datagridview.Я пробовал код, связанный с gridview, как gridView.Rows.Clear(), gridView.DataSource = Nothing

, но он не работал для меня.Затем попробуйте приведенный ниже код, связанный с datatable, прежде чем каждый раз связывать его с datagridview.

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

И работает нормально, без репликации в DataGridView

0 голосов
/ 07 февраля 2010

У меня есть этот код, работающий в форме 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 голосов
/ 07 июня 2016

Вы можете сделать это только следующими 2 строками:

DataGridView1.DataSource=Nothing
DataGridView1.DataBind()
...