【问题标题】:iterate through all the selectedValues of ListBox遍历 ListBox 的所有 selectedValues
【发布时间】:2021-05-31 20:00:51
【问题描述】:

我正在用 c# 编写一个 Windows 窗体应用程序。我有一个具有多选能力的列表框。如何获取所有选定值的值?

  sql = " Select Division.* from Division ";
  DataTable divisionTable = client.GetDataTable(null, sql,  null);
  divisionListBox.DataSource = divisionTable;
  divisionListBox.DisplayMember = "Name";
  divisionListBox.ValueMember = "BValue";                   
  divisionListBox.SelectedIndex = -1;

我想遍历所有选中的 Values 并得到它们的 BValue 的总值。

谢谢

【问题讨论】:

    标签: c# visual-studio visual-studio-2010


    【解决方案1】:

    使用SelectedItems 属性,如果将其强制转换为绑定到数据表的LB 包含的DataRowView 对象,它将与LINQ 配合使用。 (LB 绑定到 datatable.DefaultView,它是一个 DataView,因此是 DataRowView 元素。DataRowViews 有一个接受列名的 Item 索引器):

    var total = listBox1.SelectedItems.Cast<DataRowView>().Sum(drv => (int)drv["BValue"]);
    

    如果你的数据表是强类型的:

    var total = listBox1.SelectedItems.Cast<DataRowView>().Sum(drv => (drv.Row as StronglyTypedRowName).BValue);
    

    ..这更好,因为它避免了字符串索引,并且意味着如果您在代码中重命名 BValue,它将更新

    【讨论】:

      【解决方案2】:

      我想我明白了 这就是答案

        int total = 0;
        foreach (System.Data.DataRowView item in divisionListBox.SelectedItems) 
        {
           total += item.Row.Field<int>(2) ;
        }
      

      (2)表示sql语句中的BValue。 sql的结果是这样的

      ID、名称、Bvalue

      所以我想拥有 BValue,我应该使用 (2)

      【讨论】:

      • 总是避免在代码中出现“幻数”,也许还有位置索引,如果存在列顺序会改变的风险
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 2017-06-21
      • 2023-03-14
      • 2013-12-29
      相关资源
      最近更新 更多