【问题标题】:How do generate and fill a datasource by code?如何通过代码生成和填充数据源?
【发布时间】:2020-06-29 21:31:35
【问题描述】:

我已经通过代码创建了一个combobox.datasource

salmon.DataSource = {New With {.Text = CDate("1.4.20").ToString("MMM"), Key .Value = "1"},
                     New With {.Text = CDate("1.5.20").ToString("MMM"), Key .Value = "2"},
                     New With {.Text = CDate("1.6.20").ToString("MMM"), Key .Value = "3"},
                     New With {.Text = CDate("1.7.20").ToString("MMM"), Key .Value = "4"},
                     New With {.Text = CDate("1.8.20").ToString("MMM"), Key .Value = "5"},
                     New With {.Text = CDate("1.9.20").ToString("MMM"), Key .Value = "6"},
                     New With {.Text = CDate("1.10.20").ToString("MMM"), Key .Value = "7"},
                     New With {.Text = CDate("1.11.20").ToString("MMM"), Key .Value = "8"},
                     New With {.Text = CDate("1.12.20").ToString("MMM"), Key .Value = "9"},
                     New With {.Text = CDate("1.1.20").ToString("MMM"), Key .Value = "10"},
                     New With {.Text = CDate("1.2.20").ToString("MMM"), Key .Value = "11"},
                     New With {.Text = CDate("1.3.20").ToString("MMM"), Key .Value = "12"}}

我怎样才能通过编写一个循环来填充这个数据源 对于 i=1 到 12 ??? 下一个

【问题讨论】:

  • 看起来 Value 将是您的变量“i”,并且您的日期将使用 DateTime.AddDays 函数。试试看。

标签: vb.net datasource


【解决方案1】:

@LarsTech 假设您可能需要这样的东西:

For i As Integer = 1 To 12
    ComboBox1.Items.Add(New KeyValuePair(Of String, String)(CDate("1." & i.ToString & "." & Now.Year.ToString).ToString("MMM"), i.ToString))
Next

ComboBox1.DisplayMember = "Key"
ComboBox1.ValueMember = "Value"
AddHandler ComboBox1.SelectedValueChanged, Sub()
                                               MsgBox("Key:" & CType(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Key & vbNewLine &
                                                      "Value:" & CType(ComboBox1.SelectedItem, KeyValuePair(Of String, String)).Value)
                                           End Sub

【讨论】:

    【解决方案2】:

    让我们创建一个具有自定义列名和类型的数据表,用数据填充它,然后将其分配给组合显示。 :

    Dim dt as New Datatable
    dt.Columns.Add("DisplayCol")
    dt.Columns.Add("ValueCol", GetType(Integer))
    
    Dim d as New DateTime(1999, 12, 1)
    For int i = 1 to 12
      dt.Rows.Add(d.AddMonths(i).ToString("MMM"), i)
    Next i
    
    combo.DataSource = dt
    combo.DisplayMember = "DisplayCol" 'tell the combo what column name to use for display text
    combo.ValueMember = "ValueCol" 'tell the combo what column to use for value
    

    我故意将值 col 设置为 int 以演示它是如何完成的。如果你想要一个字符串,在列的构造函数中删除 GetType 并调用 i.ToString()

    combo 实际上会绑定到 table 的 DefaultView,因此我们可以使用它来对组合中显示的内容进行排序和过滤:

    'if dt is still in scope
    dt.DefaultView.Sort = "[ValueCol] DESC"
    
    'if we only can access the datatable via the datasource property of the combo
    DirectCast(combo.DataSource, DataTable).DefaultView.Sort = "[ValueCol] DESC"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      相关资源
      最近更新 更多