2010-02-07 146 views
18

我试过 -VB.NET:清除的DataGridView

DataGridView1.DataSource=Nothing 

DataGridView1.DataSource=Nothing 
DataGridView1.Refresh() 

DataGridView1.RefreshEdit() 

没有他们的作品..

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

回答

56

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

如果在DataGridView没有绑定到任何数据源,这个代码就可以了:

DataGridView.Rows.Clear() 
7

我可能会用这个...

DataGridView1.Rows.Clear() 

以清除行,然后重新绑定。

+3

它说不能清除该列表试试这个代码.. 是因为我使用数据库表作为数据源吗? – 2010-02-07 23:25:12

1

您不能将datagridview绑定到空集合(而不是null)。这有诀窍吗?

0

我有了这个代码在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

你应该从数据集删除表如果DataGrid绑定到数据表的一些。你的Gridview将被自动清除。别无退路。

[YourDatasetName].Tables.Clear() 
+0

你的答案对已经接受的答案增加了新的含义? – Yaroslav 2012-10-27 16:14:25

-1

你可以这样做:

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

按照这样

简单的方法假设taDataTable

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

对于未绑定的情况下,需要注意:

DataGridView.Rows.Clear() 

使Columns集合就位。

DataGridView.Columns.Clear() 

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

1

删除旧的纪录datagridview的,当你正在寻找新的结果,与button_click事件中写入以下代码,

me.DataGridview1.DataSource。清除()

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

1

我发现将数据源设置为null会删除列。这对我来说是什么在起作用:

C#:

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

VB:

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

大拇指提到一个共同的问题,其他答案不尊重或解决。 – 2018-02-16 08:49:10

0

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

但它没有为我工作。然后在每次将其绑定到datagridview之前,尝试下面与数据表相关的代码。

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

而且工作正常,在DataGridView中

-1

没有复制Grid显示数据的清除,你必须清楚,我用这个代码的数据集或数据表

我清除网格视图数据,即使如果重新再次提交,并再次将工作 例 昏暗CON作为新的OleDbConnection 昏暗CMD作为新的OleDbCommand 昏暗达作为新OleDbDataAdapter的 昏暗DAR作为OleDbDataReader 暗淡dt的作为新的DataTable 如果(con.State <> 1)然后 con.Open() 结束如果 dt.Clear()“清除数据每次以新的数据 cmd.Connection = CON cmd.CommandText = “从用户选择*” da.SelectCommand = CMD da.Fill(DT) DataGridView1.DataSource = DT DataGridView1.Visible =真

cmd.Dispose() 
    con.Close() 
+0

感谢您对StackOverflow的贡献:)。你正在回答的问题已经很老了,而且已经得到了回答 - 如果你也可以为更紧迫的问题付出努力,我们会很高兴。也请尽量保持您的答案与问题中的示例相关(例如,不涉及任何用户表)。 – Mifeet 2014-02-24 11:20:51

0

1)创建名为它Clear.Inside插入tfhe以下按钮代码 datagridviewer.DataSource =无

2)在您的搜索按钮通过下面的语句

datagridviewer.DataSource = DataSet.table

铌开始你的代码:不是表把你的表 前的真实姓名:datagridviewer.DataSource = DataSet.client

0

不要对DataGridView做任何事情,只要清除数据源即可。我试图清除myDataset.clear()方法,然后它的工作。

+0

解释原因总是比较好,而不仅仅是要做什么。 – edi9999 2014-06-07 12:44:57

0

将SQL查询中的信息提供给datagridview时,可以在重新加载之前先清除datagridview。

在那里我已经定义dbDataSet作为新的DataTable我可以做一个清晰的。 dbDataSet必须在公共类窗体

Dim dbDataset AS New DataTable 

你的代码私人小组内内的形式开始,将

dbDataSet.Clear() 
0

你可能有一个用户的情况,这样你想保留数据绑定并仅暂时清除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。

0

如果在DataGridView绑定到任何数据源,

DataGridView1.DataSource = Nothing 
DataGridView1.DataBind() 
0

我的DataGridView还绑定到数据源和myDataGridView.Columns.Clear()工作得很好,但myDataGridView.Rows.Clear()没有。只为那些试过.Rows的人提供了一个供参考。

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

如果GridView(说这个名字是gvArchive)被绑定到任何DataSource,下面将清除:

gvArchive.DataSource = Nothing 

gvArchive.DataBind() 
-1

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

DataGridView1.DataSource=Nothing 
DataGridView1.DataBind() 
0

只写这个

DataGridView1.DataSource = "" 
+2

虽然这段代码片段是受欢迎的,并且可能会提供一些帮助,但如果它包含* how *和* why *的解释](// meta.stackexchange.com/q/114762)问题。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 – 2017-03-27 10:18:03

0

我有同样的问题:我是我的GridView1程序绑定到一个SQL表[dictonary]或其他[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 

最后是你的单选按钮:

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 

为了完成,这里是c在关联的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> 

这一切现在都运行良好。

0

您所犯的错误是您似乎在使用数据集对象来存储您的数据。每次使用以下代码将数据放入数据集时,都会将数据添加到已存在于数据集中的数据中。

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

您还可以,如果你想清楚你的DataGridView中的所有数据

DataGridView1.DataSource.Clear()