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てから再作成するとdtcbo.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 に答える