2012-11-09 25 views
3

VB2010我已經手動創建了一個DataTable,因此它不是來自數據庫。我將它分配給一個組合框,它顯示我的數據列。如果我更改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變量,我不需要每次重新鏈接它。這是如何工作,或者我在這裏做錯了什麼?

回答

6

當您分配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 
+0

我明白了。我想我對源和表的工作原理有不同的看法。每當我更改源代碼和工作時,我都會重新鏈接。謝謝。 – sinDizzy