1

我似乎正在把头发拉到我眼中看起来非常直截了当的东西上。更改数据集后,我无法正确更新 datagridview 控件。

我最初从数据集中填充 datagridview 并自动生成列没问题。但是,如果我使用新数据重新生成数据集,datagridview 将正确显示新数据,但不会删除旧的列标题。

例如,我有一个查询,它给了我商店名称和经理,并自动填充我的数据网格视图。然后,如果我将查询更改为只给我商店名称和主管,它会给我商店名称、经理(带有空白列)和主管。

我已经尝试过 datagridview.refresh() 和 datagridview.update() 但似乎没有任何效果。这是我的代码:

    MySQLConn.Open()

    Dim ExQry As New MySqlCommand(QryStr, MySQLConn)
    ExQry.CommandType = CommandType.Text
    Dim da As New MySqlDataAdapter(ExQry)
    dasCustomQryData.Clear() 'my dataset is called dasCustomQryData

    da.Fill(dasCustomQryData, "QryData")
    da.Update(dasCustomQryData, "QryData")

    With dgvCustomQuery
        .DataSource = Nothing
        .Dock = DockStyle.Fill
        .AutoGenerateColumns = True
        .DataSource = dasCustomQryData
        .DataMember = "QryData"
        .Refresh()
        .Visible = True
    End With

    MySQLConn.Close()
    da.Dispose()
    dasCustomQryData.Dispose()

因此,当我想更新我的 datagridview 时,我将一个新的 QryStr 插入到上面的代码中,它会重建我的数据集。数据集正在更新,因为 datagridview 包含正确的数据,但是,我的问题是 datagridview 没有清除不再填充的旧列。

所有帮助表示赞赏。谢谢

4

2 回答 2

1

好的,经过一些故障排除和代码修改后,我发现解决这个问题的简单方法是数据表本身没有释放列标题。因此,即使 datagridview 和数据集被清除,数据表仍然被填充。

以下命令解决了我的问题:

dt.Columns.Clear()
于 2013-08-13T07:53:44.710 回答
1

我建议您直接从 VB 创建连接和数据集,并在数据集中显示表格。表格底部是标准查询,但您可以创建自己的...以变量作为参数,然后您可以通过表格适配器调用查询并将其直接分配给 datagridview。
这似乎总是适用于我的程序。你用的是什么类型的数据库?可能很明显,但只是为了确保 datagridview 没有绑定对吗?
我的一个项目中的示例,
dgData.DataSource = TblEventsTableAdapter.ViewEvent(cmbEvents.SelectedItem.ToString)
其中 dgdata 显然是 datagridview。ViewEvent 是在数据集中创建的自定义查询,接受 1 个参数。希望这对你有用

于 2013-08-13T04:45:44.643 回答