获取listview子项的值

时间:2013-03-21 07:40:31

标签: c#

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

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);

3 个答案:

答案 0 :(得分:1)

我更愿意像这样构建一个类

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);

答案 1 :(得分:1)

您可以Item以这种方式检索SubItems值或ListView

假设你的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传递的索引。你应该传递你想要总结的子项目索引

答案 2 :(得分:0)

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

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