4

我有一个 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);
4

3 回答 3

2

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

ListView.Items[SelectedItemIndex].SubItem[2].Text
于 2013-03-21T08:03:15.903 回答
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);
于 2013-03-21T07:55:54.407 回答
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。您应该传递要汇总的子项索引

于 2013-03-21T08:02:08.427 回答