【问题标题】:Clear the DataGridView without loosing the source在不丢失源的情况下清除 DataGridView
【发布时间】:2014-02-07 23:42:48
【问题描述】:

我有一个带有 DataGridView 的表单,dataSourced by dataTable。当我在最后插入记录时,我按下清除按钮或形成所有字段(文本框、组合框、DGV 复选框)在我按下保存按钮时自动清除。

我通常通过写来清除文本框和组合框:

textbox1.text = ""
combobox1.text = ""

但是当我这样清除 DGV 时:

dgvPurchase.dataSource = nothing
dgvPurchase.Refresh()

或 dgvPurchase.rows.clear()

它确实清除了 DGV,但是当我添加新条目时,DataGridView 和数据都不会出现在 DGV 中。在表单加载事件中,我有以下代码:

dtField = retrieveFull("ProductBasicInfo")

cmbPurProdID.DisplayMember = "ProdName"
    cmbPurProdID.ValueMember = "ProdID"
    cmbPurProdID.DataSource = dtField


 dtPurchase.Columns.Add("ProdID")
 dtPurchase.Columns.Add("ProdName")
 dtPurchase.Columns.Add("RetailerID")
 dtPurchase.Columns.Add("RetailerName")
 dtPurchase.Columns.Add("UnitPrice")
 dtPurchase.Columns.Add("Qty")
 dtPurchase.Columns.Add("Amount")

 dgvPurchase.DataSource = dtPurchase

请指导我,有什么方法可以不打扰我的数据源,或者如果我清除它,它也会刷新数据源。

这是添加按钮代码,将数据添加到DataGridView中

 Try

        For a As Integer = 0 To dtPurchase.Rows.Count - 1
            If dtPurchase.Rows(a).Item("ProdID") = cmbPurProdID.SelectedValue Then
                MessageBox.Show("This product is already enlisted")
                Exit Sub
            End If
        Next


        dRow = dtPurchase.NewRow

        dRow.Item("ProdID") = cmbPurProdID.SelectedValue
        dRow.Item("ProdName") = cmbPurProdID.Text
        dRow.Item("RetailerID") = cmbPurRetailerID.SelectedValue
        dRow.Item("RetailerName") = cmbPurRetailerID.Text
        dRow.Item("UnitPrice") = txtPurUnitPrice.Text.Trim
        dRow.Item("Qty") = txtPurQty.Text.Trim
        dRow.Item("Amount") = txtPurAmount.Text.Trim

       dtPurchase.Rows.Add(dRow)

【问题讨论】:

  • datagridview's DataSource 设置为新的空DataTource
  • 请添加表单截图。
  • 快速解决方案:将Form.Load中的代码放到自己的方法中(例如:LoadData)。然后在Form.Load 事件处理程序中调用此方法,并在清空行之后...
  • @Marek:我试过 DGV.Datasource = NOthing 但也没有工作。 Neolisk 我尝试添加图像,但我不知道如何将图像附加到我的线程。

标签: vb.net winforms datagridview


【解决方案1】:

您可以创建新的空DataTable 并将其设置为:

c#

DataTable emptyDT = new DataTable();
dgvPurchase.DataSource = emptyDT

vb.Net

Dim emptyDT As New DataTable()
dgvPurchase.DataSource = emptyDT

这对你有用吗?

【讨论】:

  • 没有。它清除了 DGV,但是当我为下一个条目添加新项目时,前一个已经存在。
  • 是的,因为您再次将之前的 DataTable 加载到 DGV 中。而且您还执行dtPurchase.Rows.Add(dRow),这意味着您将以前的DataTable 中的记录添加到新的空记录中。我也不确定您要达到的目标。正如您所说,按下按钮clear 您想清除datagridview 和所有文本框而不丢失数据,对吗?然后,当您向以前的 datatable dtPurchase 添加一些记录时,您想仅显示新的 rocord 的 datagridview?
  • 嗯。亲爱的马雷克,我认为我做错了什么,如果这是真的,那么我对此一无所知。请指导我现在在我的代码中所做的更改。我认为我们正在接近解决方案。
  • 我做了这样的事情。 “dtPurchase.Rows.Clear()”。这样做对吗?
  • @user87 我不太确定你想在这里实现什么,请你再描述一下你的设计程序吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 2011-12-06
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 2019-06-08
相关资源
最近更新 更多