Подтвердить что ты не робот

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

Я пробовал -

DataGridView1.DataSource=Nothing

и

DataGridView1.DataSource=Nothing
DataGridView1.Refresh()

и

DataGridView1.RefreshEdit()

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

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

4b9b3361

Ответ 1

Если DataGridView привязан к любому источнику данных, вам необходимо установить свойство DataGridView DataSource в Nothing.

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

DataGridView.Rows.Clear()

Ответ 2

Для несвязанных случаев обратите внимание, что:

DataGridView.Rows.Clear()

оставляет коллекцию столбцов на месте.

DataGridView.Columns.Clear()

.. удалит все столбцы и строки. Если вы используете несвязанный DGV, а при следующем использовании столбцы меняются, очистка строк может быть недостаточной. Для кода библиотеки очистить все столбцы перед добавлением столбцов.

Ответ 3

Я бы, наверное, использовал это...

DataGridView1.Rows.Clear()

чтобы очистить строки, а затем восстановить.

Ответ 4

Следуйте легкому способу, подобному этому

предположим, что ta является DataTable

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

Ответ 5

Не можете ли вы привязать datagridview к пустой коллекции (вместо null). Это трюк?

Ответ 6

Чтобы удалить старую запись в datagridview, когда вы ищете новый результат, при событии button_click напишите следующий код,

me.DataGridview1.DataSource.clear()

этот код поможет удалить старую запись в datagridview.

Ответ 7

Я обнаружил, что установка источника данных на null удаляет столбцы. Это то, что работает для меня:

С#:

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

VB:

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

Ответ 8

Не делайте ничего на DataGridView, просто очистите источник данных. Я попробовал очистить метод myDataset.clear(), затем он сработал.

Ответ 9

My DataGridView также привязан к DataSource и myDataGridView.Columns.Clear() работал нормально, но myDataGridView.Rows.Clear() НЕ. Просто FYI для тех, кто пробовал .Rows.

Ответ 10

У меня этот код работает в форме окна,

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

Ответ 11

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

[YourDatasetName].Tables.Clear()

Ответ 12

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

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

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

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

Ответ 13

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

2) В вашей кнопке поиска запустите свой код следующим оператором

datagridviewer.DataSource = DataSet.table

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

Ответ 14

При загрузке информации из SQL-запроса в datagridview вы можете сначала очистить datagridview, прежде чем перезагружать его.

Где я определил dbDataSet как новый DataTable, я могу сделать ясно. dbDataSet должен находиться в начале формы в форме открытого класса

Dim dbDataset AS New DataTable

в рамках кода вашего частного Sub, укажите

dbDataSet.Clear()

Ответ 15

У вас может быть сценарий пользователя, в котором вы хотите сохранить привязку данных и только временно очистить DataGridView. Например, вы можете щелкнуть мышью на объекте на карте, чтобы показать его атрибуты для редактирования. Он щелкает в первый раз, или он уже нажал на один и отредактировал его. Когда пользователь нажимает кнопку "Выбрать объект", вы хотите очистить DataGridView от данных из предыдущего объекта (и не вызывать ошибку, если это его первый выбор). В этом случае вы можете достичь чистого DataGridView, адаптировав сгенерированный код, который заполняет DataGridView. Предположим, что сгенерированный код выглядит следующим образом:

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

Мы заполняем DataGridView на основе номера гидранта. Скопируйте этот код так, чтобы вы очистили DataGridView и заменили значение "hydrantNum", которое, как вы знаете, не получит данных. Сетка очистится. И когда пользователь на самом деле выбирает объект (в данном случае гидрант), привязка имеет место для надлежащего заполнения DataGridView.

Ответ 16

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

DataGridView1.DataSource = Nothing
DataGridView1.DataBind()

Ответ 17

Dim DS As New DataSet

DS.Clear() - DATASET работает лучше, чем 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

Ответ 18

Если GridView (Скажем, имя gvArchive) привязано к любому DataSource, следующее очистит его:

gvArchive.DataSource = Nothing

gvArchive.DataBind()

Ответ 19

просто напишите это

DataGridView1.DataSource = ""

Ответ 20

У меня была такая же проблема: я программно связывал свой 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>

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

Ответ 21

Ошибка, которую вы делаете, заключается в том, что вы, кажется, используете объект набора данных для хранения ваших данных. Каждый раз, когда вы используете следующий код для ввода данных в свой набор данных, вы добавляете данные к данным, уже находящимся в вашем наборе данных.

myDataAdapter.Fill(myDataSet)

Если вы назначаете таблицу в своем наборе данных объекту DataGridView в вашей программе по следующему коду, вы получите повторяющиеся результаты, потому что вы не очистили данные, которые уже находятся в вашем наборе данных и в таблице данных.

myDataGridView.DataSource = myDataSet.Tables(0)

Чтобы избежать репликации данных, вы должны вызвать метод clear на вашем объекте набора данных.

myDataSet.clear()

Затем назначьте таблицу в вашем наборе данных объекту DataGridView. Код выглядит следующим образом.

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

Вы можете попробовать этот код:

' 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

Ответ 22

Используйте этот код везде, где вы хотите реализовать команду clear datagridview

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

этот код очистит сетку данных и остановит дублирование данных при заполнении данных из базы данных.

Ответ 23

Вы можете сделать так:

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

Ответ 24

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

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

    cmd.Dispose()
    con.Close()

Ответ 25

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

DataGridView1.DataSource=Nothing
DataGridView1.DataBind()

Ответ 26

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

DataGridView1.DataSource.Clear()