【问题标题】:VB.NET: Clear DataGridViewVB.NET:清除 DataGridView
【发布时间】:2011-01-14 02:26:40
【问题描述】:

我试过了-

DataGridView1.DataSource=Nothing

DataGridView1.DataSource=Nothing
DataGridView1.Refresh()

DataGridView1.RefreshEdit()

它们都不起作用..

我编写了一个方法,在执行时设置 DataGridView 的 DataSource。但是每次我执行它时,它都会使用新值复制数据并将其附加到 DGV 的先前内容中。我想清除内容然后添加值。这可能吗?

【问题讨论】:

    标签: vb.net datagridview datasource datagridviewrow


    【解决方案1】:

    如果 DataGridView 绑定到任何数据源,则必须将 DataGridView 的 DataSource 属性设置为 Nothing

    如果 DataGridView 未绑定到任何数据源,则此代码可以解决问题:

    DataGridView.Rows.Clear()
    

    【讨论】:

    • 如果此代码抛出类似“无法清除此列表”的错误,我建议采用这种方法:DataGridView.DataSource = Nothing ...然后刷新它...DataGridView.Refresh()
    【解决方案2】:

    对于未绑定的情况,请注意:

    DataGridView.Rows.Clear()
    

    保留 Columns 集合。

    DataGridView.Columns.Clear()
    

    ..将删除所有列和行。如果您使用的是未绑定的 DGV,并且在下次使用时更改了列,则清除行可能还不够。对于库代码,在添加列之前清除所有列。

    【讨论】:

      【解决方案3】:

      我可能会用这个...

      DataGridView1.Rows.Clear()
      

      清除行然后重新绑定。

      【讨论】:

      • 它说无法清除此列表。是因为我使用数据库表作为数据源吗?
      【解决方案4】:

      按照这样的简单方法进行

      假设taDataTable

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

      【讨论】:

        【解决方案5】:

        你能不能将datagridview绑定到一个空集合(而不是null)。这样就行了?

        【讨论】:

          【解决方案6】:

          要在搜索新结果时删除datagridview中的旧记录,使用button_click事件编写以下代码,

          me.DataGridview1.DataSource.clear()

          此代码将有助于删除 datagridview 中的旧记录。

          【讨论】:

            【解决方案7】:

            我发现将数据源设置为 null 会删除列。这对我有用:

            c#:

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

            VB:

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

            【讨论】:

            • 点赞以提及一个常见问题,其他答案不尊重或解决。
            【解决方案8】:

            我的 DataGridView 也绑定到 DataSource 并且 myDataGridView.Columns.Clear() 工作正常,但 myDataGridView.Rows.Clear() 没有。仅供那些尝试过.Rows的人参考。

            【讨论】:

              【解决方案9】:

              不要对DataGridView做任何事情,只是清除数据源。我尝试清除myDataset.clear() 方法,然后它起作用了。

              【讨论】:

              • 最好解释原因,而不仅仅是做什么。
              【解决方案10】:

              我已经让这段代码在 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
              

              【讨论】:

                【解决方案11】:

                如果数据网格绑定到某个数据表,您应该从数据集中删除该表。您的 Gridview 将被自动清除。没有别的办法。

                [YourDatasetName].Tables.Clear()
                

                【讨论】:

                • 您的答案对已经接受的答案有何新意?
                【解决方案12】:

                我在清除 gridview 内容时遇到了同样的问题。我使用的数据源是一个没有列的数据表,我以编程方式将列和行添加到数据表中。然后绑定到datagridview。我尝试了与gridview相关的代码,例如gridView.Rows.Clear()gridView.DataSource = Nothing

                但这对我不起作用。然后在每次将其绑定到datagridview之前尝试以下与datatable相关的代码。

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

                并且工作正常,DataGridView 中没有复制

                【讨论】:

                  【解决方案13】:

                  1) 创建按钮,命名为 Clear.Inside 插入以下代码 datagridviewer.DataSource=nothing

                  2) 在您的搜索按钮中,通过以下语句开始您的代码

                  datagridviewer.DataSource = DataSet.table

                  注意:用你的表的真实名称代替表 例如:datagridviewer.DataSource = DataSet.client

                  【讨论】:

                    【解决方案14】:

                    当将来自 SQL 查询的信息输入到 datagridview 时,您可以在重新加载之前先清除 datagridview。

                    我将 dbDataSet 定义为 New DataTable 的地方我可以清楚。 dbDataSet 必须位于公共类表单中的表单开头

                    Dim dbDataset AS New DataTable
                    

                    在您的 Private 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 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
                          

                          【讨论】:

                            【解决方案18】:

                            如果GridView(假设名称是gvArchive)绑定到任何DataSource,以下将清除它:

                            gvArchive.DataSource = Nothing
                            
                            gvArchive.DataBind()
                            

                            【讨论】:

                              【解决方案19】:

                              就这样写吧

                              DataGridView1.DataSource = ""
                              

                              【讨论】:

                              • 虽然欢迎使用此代码 sn-p,并且可能会提供一些帮助,但它会是 howwhygreatly improved if it included an explanation 这解决了问题。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。
                              【解决方案20】:

                              我遇到了同样的问题:我正在以编程方式将我的 GridView1 绑定到一个 SQL 表 [ditonary] 或另一个 [meny] 但是当我从 RadioButtonList1 中选择第二个表时,我收到一个错误 (System.Web.HttpException:在所选数据源中未找到标题为 [先前选择的表中第一列的标题] 的字段或属性。)即表示无法找到我的第一个选择表中的列。我需要做的就是插入:

                              GridView1.Columns.Clear()
                              

                              在添加表格列之前。完整代码如下:

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

                              然后是你的第一个子:

                              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
                              

                              然后是你的第二个子:

                              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
                              

                              为了完成,这里是关联 aspx.file 中 GridView1 和 RadioButtonList1 的代码:

                              <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
                                  

                                  此代码将在从数据库中填充数据时清除 datagridview 并停止数据复制。

                                  【讨论】:

                                    【解决方案23】:

                                    你可以这样做:

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

                                    【讨论】:

                                      【解决方案24】:

                                      要清除网格视图数据,您必须清除数据集或数据表

                                      我使用此代码我清除了网格视图数据,即使一次又一次重新提交它也会起作用 例子 Dim con 作为新的 OleDbConnection 将 cmd 调暗为新的 OleDbCommand Dim da 作为新的 OleDbDataAdapter Dim dar 作为 OleDbDataReader 将 dt 调暗为新数据表 如果 (con.State 1) 那么 con.Open() 万一 dt.Clear() '每次清除数据到新数据 cmd.Connection = con cmd.CommandText = "从用户中选择 *" da.SelectCommand = cmd da.填充(dt) DataGridView1.DataSource = dt DataGridView1.Visible = True

                                          cmd.Dispose()
                                          con.Close()
                                      

                                      【讨论】:

                                      • 感谢您对 StackOverflow 的贡献 :)。您正在回答的问题已经过时并且已经回答了 - 如果您也可以为更紧迫的问题付出努力,我们将很高兴。另外,请尽量让您的答案与问题中的示例相关(例如,它不涉及任何用户表)。
                                      【解决方案25】:

                                      您只能通过以下两行来做到这一点:

                                      DataGridView1.DataSource=Nothing
                                      DataGridView1.DataBind()
                                      

                                      【讨论】:

                                        【解决方案26】:

                                        如果您想清除 DataGridView 中的所有数据,也可以尝试此代码

                                        DataGridView1.DataSource.Clear()
                                        

                                        【讨论】:

                                          【解决方案27】:

                                          对特定单元格试试这个:

                                          Datagrid.Rows(RowIndex).Cells(ColIndex).Value = DBNull.Value
                                          

                                          【讨论】:

                                          • 非常简短的答案往往会被自动标记为低质量,因此请避免这样的单行答案。除此之外,添加一点为什么您建议的更改应该可以解决问题的解释总是有帮助的。
                                          【解决方案28】:

                                          DgRemolques 是我在 WPF 上的数据网格的名称

                                          dgRemolques.ItemsSource = 无 但我也需要清理数据表 dtRemolques.Clear()

                                          【讨论】:

                                          • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                                          猜你喜欢
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 2016-09-12
                                          • 2021-10-12
                                          • 2016-11-01
                                          • 2016-07-26
                                          • 1970-01-01
                                          • 2012-10-11
                                          • 1970-01-01
                                          相关资源
                                          最近更新 更多