3

VB2010 我手动创建了一个 DataTable,所以它不是来自数据库。我已将它分配给一个组合框,它显示我的数据列。如果我更改 DataTable 是否必须重新建立链接?

'assign first table
dt = GetFirstTable()
cbo.DataSource = dt
cbo.DisplayMember = "Time"
cbo.ValueMember = "Time"

'print out items in combobox

'assign second table
dt = GetSecondTable()
'cbo.DataSource = dt 'do i have to re-connect here?

'print out items in combobox

似乎如果我不重新建立链接,我会得到相同的项目。我虽然因为 cbo 已经链接到 dt 变量,所以我不需要每次都重新链接它。这是这样工作的还是我在这里做错了什么?

4

1 回答 1

9

当您分配cbo.DataSource = dt,然后重新创建dt时,cbo.DataSource将继续指向旧表。这是在这里工作的纯指针逻辑,相同的原则适用于所有 .NET 代码。这并不意味着您正在重新使用相同的变量。相反,您可以创建dt2并使用它,行为将是相同的。所以是的,如果您重新创建DataTable,则需要DataSource再次重新分配。但是,如果您更改原始dt,即添加行,则会出现这些行,因此您无需重新分配DataSource。这是一个代码示例,用于说明该方法:

Dim _dt As DataTable

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  _dt = New DataTable
  With _dt.Columns
    .Add("key")
    .Add("value")
  End With
  With ComboBox1
    .DisplayMember = "value"
    .ValueMember = "key"
    .DataSource = _dt
  End With
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  _dt.Rows.Add({"item_key", "item_value"})
End Sub
于 2012-11-09T01:00:29.470 回答