【问题标题】:How do I bind a data from a separate listbox?如何绑定来自单独列表框的数据?
【发布时间】:2021-10-08 11:07:40
【问题描述】:

我有两个列表框,我有一个按钮可以在消息框中显示所选项目,但我需要从两个列表框中进行选择。有没有办法让我将第二个列表框的数据绑定到第一个列表框。

这是界面:

这就是选择时数据的显示方式

我的意思是绑定数据,即使选择了其他东西,我也希望 200 卡路里值与大米保持一致

Public Class Form1
Public strfood As String

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click

    Dim calory As Single

    strfood = InputBox("Enter food item", "Food List")
    calory = InputBox("Enter calory", "Calory List")

    FoodList.Items.Add(strfood)
    CaloryList.Items.Add(calory)
End Sub

Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click

    Dim selecteditem As String = FoodList.SelectedItems(0).ToString
    Dim selectedcalory As String = CaloryList.SelectedItems(0).ToString

    MessageBox.Show("Food :" + selecteditem & " " & "Calories :" + selectedcalory)
End Sub

【问题讨论】:

  • 请edit您的问题并解释“将第二个列表框中的数据绑定到第一个”的确切含义。如果可能的话,举一个例子和一些示例数据。
  • 为此“绑定数据我希望 200 卡路里值与大米保持一致,即使选择了其他东西”您需要将每个绑定/组合保存在某处。您需要将其保存在哪些食物与哪些卡路里结合的列表中。你可以例如。如果需要临时绑定(用于计算某些内容)或者如果您需要它来持久化应用程序的会话,则使用字典,那么您需要将组合保存在数据库或其他东西中。
  • 为什么不直接使用 DataGridView 或 ListView?

标签: vb.net winforms


【解决方案1】:

同意djv的建议;这些东西应该在一个网格中

  • 在解决方案资源管理器中右键单击项目
  • 添加新项目
  • 添加数据集类型的文件
  • 双击它,一个空的表面出现。将数据集重命名为 CalTrackerDataSet(道具网格)等合理的名称
  • 右键单击表面并选择 Add..DataTable
  • 将其命名为食品
  • 右击DataTable,选择Add..Column
  • 把它命名为食物
  • 添加另一个名为 Calories 的列,并在属性网格中将其类型设置为 Int32(整数)
  • 保存
  • 转到您的表单
  • 打开数据源工具面板(在视图菜单上,在其他窗口中)并找到 Foods 节点,将其拖到表单中
  • 底部托盘中出现一个项目,称为 CalTrackerDataSet - 将其更改为 CalTrackerDS - 我推荐这个纯粹是因为当 vb 将事物的实例命名为与类型相同时,这是一个很大的混淆点

您不再需要 BtnAdd 代码,因为只需在网格中键入即可创建新行,但如果您确实想以编程方式添加这样的行,您可以:

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click

    Dim f = InputBox("Enter food item", "Food List")
    Dim c = Convert.ToInt32(InputBox("Enter calory", "Calory List"))

    CalTrackerDS.Foods.AddFoodsRow(f,c)
End Sub

并且显示用户点击的行更加微妙;称为 BindingSource 的设备跟踪当前行。因为它适用于广泛的数据源,所以它返回非常基本的对象,这些对象隐藏了绑定数据的细节,因此您必须强制转换才能将它们返回

Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click

    Dim cur and DirectCast(DirectCast(FoodsBindingSource.Current, DataRowView).Row, CalTrackerDataSet.FoodsRow) 

    MessageBox.Show("Food :" & cur.Food & " " & ", Calories :" & cur.Calories)
End Sub

【讨论】:

    猜你喜欢
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2021-12-08
    • 2011-01-28
    相关资源
    最近更新 更多