VB.NET: Ясная объекта datagridview

Я пробовал -

DataGridView1.DataSource=Nothing

и

DataGridView1.DataSource=Nothing
DataGridView1.Refresh()

и

DataGridView1.RefreshEdit()

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

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

25 ответов


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

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

DataGridView.Rows.Clear()

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

DataGridView1.Rows.Clear()

очистить ряды, а потом перепривязать.


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

DataGridView.Rows.Clear()

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

DataGridView.Columns.Clear()

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


следуйте простым путем, как это

предположим, что ta это DataTable

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

вы не можете привязать datagridview к пустой коллекции (вместо null). В этом весь фокус?


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

меня.DataGridview1.Источник.clear ()

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


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

c#:

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

В. Б.:

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

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

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

[YourDatasetName].Tables.Clear()

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

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

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

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


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

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

datagridviewer.Источник Данных = Набор Данных.таблица

Nb: вместо таблицы поместите реальное имя вашей таблицы экс: datagridviewer.Источник Данных = Набор Данных.клиент


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

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

Dim dbDataset AS New DataTable

в коде вашего частного суб, место

dbDataSet.Clear()

у вас может быть пользовательский сценарий, который вы хотите сохранить привязку данных и только временно очистить 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.


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

DataGridView1.DataSource = Nothing
DataGridView1.DataBind()

мой DataGridView также привязан к источнику данных и myDataGridView.Columns.Clear() работал нормально, но myDataGridView.Rows.Clear() не. Просто FYI для тех, кто пробовал .Rows.


Dim DS As New DataSet

DS.Clear() - DATASET 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

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

gvArchive.DataSource = Nothing

gvArchive.DataBind()

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


писать

DataGridView1.DataSource = ""

у меня была та же проблема: я программно привязывал свой GridView1 к одной таблице SQL [диктонарий] или другой [meny], но когда я выбрал вторую таблицу из моего RadioButtonList1, я получал ошибку (система.Сеть.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.файл:

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

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


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

myDataAdapter.Fill(myDataSet)

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

myDataGridView.DataSource = myDataSet.Tables(0)

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

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

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

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

для очистки данных представления сетки вы должны очистить dataset или Datatable

Я использую этот код я очищаю данные представления сетки, даже если повторно отправить снова и снова он будет работать Образец Dim con как новый OleDbConnection Dim cmd как новый OleDbCommand Дим да как новый OleDbDataAdapter Дим дар как OleDbDataReader Dim dt как новый DataTable If (con.Состояние 1) Затем кон.Открыть() Конец, Если Второзаконие.Clear () ' для очистки данных каждый раз для свежих данных УМК.Соединение = кон УМК.CommandText = " выбрать * у пользователей" окружной прокурор.Команды selectcommand = ЦМД окружной прокурор.Заливка (dt) DataGridView1.Источник данных = dt DataGridView1.Visible = True

    cmd.Dispose()
    con.Close()

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

DataGridView1.DataSource=Nothing
DataGridView1.DataBind()

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

DataGridView1.DataSource.Clear()