将DataTable分配给ComboBox然后进行更改

sin*_*zzy 3 vb.net datatable combobox datasource

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
Run Code Online (Sandbox Code Playgroud)

似乎我不重新建立链接我得到相同的项目.我虽然因为cbo已经链接到dt变量,所以我不需要每次都重新链接它.那是怎么回事,或者我在这里做错了什么?

Neo*_*isk 8

分配时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
Run Code Online (Sandbox Code Playgroud)