【问题标题】:get the value of a listview subitem获取列表视图子项的值
【发布时间】:2013-03-21 16:03:15
【问题描述】:

我有一个 C# 代码。我有一个列表视图,然后我想要的是获取子项的值,特别是包含订单小计价格的小计子项。我想总结这些值并以相同的形式显示到文本框。我怎样才能做到这一点?这是我的代码:

AddOrderForm add = new AddOrderForm();
        foreach (DataRow drow in dt.Rows)
        {
            add.nametb.Text = drow["Menu"].ToString();
            add.Pricetb.Text = drow["MenuPrice"].ToString();
            add.listBox1.Items.Add(drow["MenuDesc"].ToString());
            add.orderqtytb.Focus();
            add.ShowDialog();                
        }
        if (add.isAddOrder)
        {

            ListViewItem item = new ListViewItem();
            item.Text = add.nametb.Text;
            item.SubItems.Add(add.orderqtytb.Text);
            item.SubItems.Add(add.Pricetb.Text);              

            double total = 0;
            try
            {
                total = double.Parse(add.Pricetb.Text) * double.Parse(add.orderqtytb.Text);
            }
            catch
            {
                total = 0;
            }
            item.SubItems.Add(total.ToString("0.00"));
            Listview.Items.Add(item);

【问题讨论】:

    标签: c#


    【解决方案1】:

    您的代码已经将项目正确添加到 Listview,假设您想在 SelectedIndexChanged 事件中检索“total”列的值,您可以这样做 -

    ListView.Items[SelectedItemIndex].SubItem[2].Text
    

    【讨论】:

      【解决方案2】:

      您可以通过这种方式在ListView 中检索Item 值或其SubItems

      假设你的 ListView 是这样的:

      public void AddDataToLvw(){
                  ListViewItem item1 = new ListViewItem("item1", 0);
                  item1.SubItems.Add("1");
                  item1.SubItems.Add("3");
      
                  ListViewItem item2 = new ListViewItem("item2", 1);
                  item2.SubItems.Add("4");
                  item2.SubItems.Add("6");
      
                  ListViewItem item3 = new ListViewItem("item3", 0);
                  item3.SubItems.Add("7");
                  item3.SubItems.Add("9");
      
                  // Create columns for the items and subitems.
                  listView1.Columns.Add("Item Column", -2, HorizontalAlignment.Left);
                  listView1.Columns.Add("Column 2", -2, HorizontalAlignment.Left);
                  listView1.Columns.Add("Column 3", -2, HorizontalAlignment.Left);
      
                  listView1.Items.AddRange(new ListViewItem[] { item1, item2, item3 });
      
      }
      

      然后你可以像这样访问它的子项:

       private void GetSubItems()
          {
              int total = 0;
              foreach (ListViewItem item in listView1.Items)
              {
                  total += Convert.ToInt32(item.SubItems[1].Text);
      
              }
              MessageBox.Show(total.ToString());
          }
      

      注意我在item.SubItems 中传递的索引。您应该传递要汇总的子项索引

      【讨论】:

        【解决方案3】:

        我更愿意构造一个这样的类

        class MyClass
        {
            public string PropertyA { get; set; }
            public string PropertyB { get; set; }
            public string PropertyC { get; set; }
            public string PropertyD { get; set; }
        }
        

        在构建 Listview 时,您生成此类填充属性并将该类的对象添加到 ListViewItem 的 Tag

        MyClass myClass = new MyClass();
        myClass.PropertyA = "A";
        myClass.PropertyB = "B";
        myClass.PropertyC = "C";
        myClass.PropertyD = "D";
        
        ListViewItem item = new ListViewItem();
        item.Text = myClass.PropertyA;
        item.SubItems.Add(myClass.PropertyB);
        item.SubItems.Add(myClass.PropertyC);
        item.Tag = myClass;
        

        现在您可以从标签中获取对象并且您拥有自己的值

        MyClass myClassForLaterUse = (MyClass)item.Tag;
        MessageBox.Show(myClassForLaterUse.PropertyA);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-12
          • 1970-01-01
          • 2021-12-15
          • 1970-01-01
          • 2013-10-11
          • 2011-10-08
          相关资源
          最近更新 更多