Ответ 1
Если DataGridView привязан к любому источнику данных, вам необходимо установить свойство DataGridView DataSource
в Nothing
.
Если DataGridView не привязан к какому-либо источнику данных, этот код выполнит трюк:
DataGridView.Rows.Clear()
Я пробовал -
DataGridView1.DataSource=Nothing
и
DataGridView1.DataSource=Nothing
DataGridView1.Refresh()
и
DataGridView1.RefreshEdit()
Ни один из них не работает.
Я написал метод, который устанавливает DataSource DataGridView при его выполнении. но каждый раз, когда я его выполняю, он реплицирует данные новым значением и добавляет его в предыдущее содержимое DGV. Я хочу очистить содержимое, а затем добавить значения. Возможно ли это?
Если DataGridView привязан к любому источнику данных, вам необходимо установить свойство DataGridView DataSource
в Nothing
.
Если DataGridView не привязан к какому-либо источнику данных, этот код выполнит трюк:
DataGridView.Rows.Clear()
Для несвязанных случаев обратите внимание, что:
DataGridView.Rows.Clear()
оставляет коллекцию столбцов на месте.
DataGridView.Columns.Clear()
.. удалит все столбцы и строки. Если вы используете несвязанный DGV, а при следующем использовании столбцы меняются, очистка строк может быть недостаточной. Для кода библиотеки очистить все столбцы перед добавлением столбцов.
Я бы, наверное, использовал это...
DataGridView1.Rows.Clear()
чтобы очистить строки, а затем восстановить.
Следуйте легкому способу, подобному этому
предположим, что ta
является DataTable
ta.clear()
DataGridView1.DataSource = ta
DataGridView1.DataSource = Nothing
Не можете ли вы привязать datagridview к пустой коллекции (вместо null). Это трюк?
Чтобы удалить старую запись в datagridview, когда вы ищете новый результат, при событии button_click напишите следующий код,
me.DataGridview1.DataSource.clear()
этот код поможет удалить старую запись в datagridview.
Я обнаружил, что установка источника данных на null удаляет столбцы. Это то, что работает для меня:
С#:
((DataTable)myDataGrid.DataSource).Rows.Clear();
VB:
Call CType(myDataGrid.DataSource, DataTable).Rows.Clear()
Не делайте ничего на DataGridView
, просто очистите источник данных. Я попробовал очистить метод myDataset.clear()
, затем он сработал.
My DataGridView также привязан к DataSource и myDataGridView.Columns.Clear()
работал нормально, но myDataGridView.Rows.Clear()
НЕ. Просто FYI для тех, кто пробовал .Rows
.
У меня этот код работает в форме окна,
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
Вы должны удалить таблицу из набора данных, если datagrid привязан к некоторому datatable. Ваш Gridview будет очищен автоматически. Нет другого способа.
[YourDatasetName].Tables.Clear()
У меня была такая же проблема при очистке содержимого gridview. В качестве источника данных я использовал данные, не имеющие столбцов, и я добавлял столбцы и строки программно к datatable. Затем привяжите к datagridview. Я пробовал код, связанный с gridview, как gridView.Rows.Clear()
, gridView.DataSource = Nothing
но это не сработало для меня. Затем попробуйте приведенный ниже код, связанный с datatable, прежде чем привязывать его к datagridview каждый раз.
dtStore.Rows.Clear()
dtStore.Columns.Clear()
gridView.DataSource = dtStore
И работает нормально, без репликации в DataGridView
1) создайте кнопку с именем Clear.Inside добавьте следующий код datagridviewer.DataSource = ничего
2) В вашей кнопке поиска запустите свой код следующим оператором
datagridviewer.DataSource = DataSet.table
Nb: вместо таблицы введите реальное имя вашей таблицы ex: datagridviewer.DataSource = DataSet.client
При загрузке информации из SQL-запроса в datagridview вы можете сначала очистить datagridview, прежде чем перезагружать его.
Где я определил dbDataSet как новый DataTable, я могу сделать ясно. dbDataSet должен находиться в начале формы в форме открытого класса
Dim dbDataset AS New DataTable
в рамках кода вашего частного Sub, укажите
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()
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
Если GridView
(Скажем, имя gvArchive
) привязано к любому DataSource
, следующее очистит его:
gvArchive.DataSource = Nothing
gvArchive.DataBind()
просто напишите это
DataGridView1.DataSource = ""
У меня была такая же проблема: я программно связывал свой 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>
Теперь все работает хорошо.
Ошибка, которую вы делаете, заключается в том, что вы, кажется, используете объект набора данных для хранения ваших данных. Каждый раз, когда вы используете следующий код для ввода данных в свой набор данных, вы добавляете данные к данным, уже находящимся в вашем наборе данных.
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
Используйте этот код везде, где вы хотите реализовать команду clear datagridview
datagridview1.datasource= nothing
datagridview1.datasource= ds
dt.clear() 'Dt as new DATATABLE
ds.clear() 'Ds as new Dataset
этот код очистит сетку данных и остановит дублирование данных при заполнении данных из базы данных.
Вы можете сделать так:
DataGridView1.Enable = false
DataGridView1.DataSource = Nothing
DataGridView1.Enable = true
Для данных "Очистить данные сетки" Вам необходимо очистить набор данных или 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()
Вы можете сделать это только двумя следующими строками:
DataGridView1.DataSource=Nothing
DataGridView1.DataBind()
Вы также можете попробовать этот код, если вы хотите очистить все данные в вашем DataGridView
DataGridView1.DataSource.Clear()