【问题标题】:Assigning a DataTable to a ComboBox and then making changes将 DataTable 分配给 ComboBox,然后进行更改
【发布时间】:2012-10-29 07:23:17
【问题描述】:

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 变量,所以我不需要每次都重新链接它。是这样工作的还是我在这里做错了什么?

【问题讨论】:

    标签: vb.net combobox datatable datasource


    【解决方案1】:

    当您分配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
    

    【讨论】:

    • 我明白了。我想我对源和表的工作方式有不同的想法。每次更改源及其工作时,我都会重新链接。谢谢。
    猜你喜欢
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多