问题 如何在列表视图中查找列的总和?

卡卡西莫

成员
已加入
2020年12月16日
留言内容
8
编程经验
Beginner
C#:
String[] arr = new String[4];
arr[0] = pname.Text;
arr[2] = qtytextBox.Text;
arr[1] = pricy.Text;
double f1, g1, j;

double.TryParse(qtytextBox.Text, out f1);
double.TryParse(pricy.Text, out g1);

j = f1 * g1;

if (j > 0)
    arr[3] = j.ToString();

ListViewItem listy = new ListViewItem(arr);
listView1.Items.Add(listy);
 
由主持人最后编辑:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,530
地点
弗吉尼亚州切萨皮克
编程经验
10+
欢迎来到论坛。

将来,请不要只是转储代码,并希望我们弄清楚您要做什么。请详细说明您要做什么以及遇到什么问题。主题的一行主题行不会删减。

另外,在发布代码时,请将其放在代码标签中。这有助于保留格式并使其更易于阅读代码。
 

约阿基姆

成员
已加入
2018年10月4日
留言内容
11
地点
瑞典斯德哥尔摩
编程经验
10+
在你的例子中 @卡卡西莫 它永远是四个。以下是一个动态示例。
如何计算ListView中的列:
        private void NumberOfColumnsInAListViewExample()
        {
            var alistView = new ListView();
            var name = "Name";
            var price = "200";
            var qty = "10";
            List<string> lst = new List<string>(4)
            {
                name,
                price,
                qty
            };
            double j;
            double.TryParse(qty, out double f1); double.TryParse(price, out double g1);
            j = f1* g1;
            if (j > 0)
            {
                lst.Add(j.ToString());
            }
            alistView.Items.Add(new ListViewItem(lst.ToArray()));
            MessageBox.Show($"Number of columns={alistView.Items[alistView.Items.Count - 1].SubItems.Count}");
        }
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,523
地点
悉尼,澳大利亚
编程经验
10+
In your example @卡卡西莫 它永远是四个。以下是一个动态示例。
如何计算ListView中的列:
        private void NumberOfColumnsInAListViewExample()
        {
            var alistView = new ListView();
            var name = "Name";
            var price = "200";
            var qty = "10";
            List<string> lst = new List<string>(4)
            {
                name,
                price,
                qty
            };
            double j;
            double.TryParse(qty, out double f1); double.TryParse(price, out double g1);
            j = f1* g1;
            if (j > 0)
            {
                lst.Add(j.ToString());
            }
            alistView.Items.Add(new ListViewItem(lst.ToArray()));
            MessageBox.Show($"Number of columns={alistView.Items[alistView.Items.Count - 1].SubItems.Count}");
        }
OP正在询问如何对列中的值求和,而不是对列进行计数。
C#:
var sum = myListView.Items
                    .Cast<ListViewItem>()
                    .Sum(lvi =>
                         {
                             double.TryParse(lvi.SubItems[columnIndex].Text, out var number);

                             return number;
                         });
如果您知道这些值将是有效的,那可以简化一下:
C#:
var sum = myListView.Items
                    .Cast<ListViewItem>()
                    .Sum(lvi => double.Parse(lvi.SubItems[columnIndex].Text));
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,523
地点
悉尼,澳大利亚
编程经验
10+
如果要汇总多列:
C#:
var column1Sum = 0.0;
var column2Sum = 0.0;

foreach (ListViewItem item in myListView.Items)
{
    double.TryParse(item.SubItems[columnIndex1].Text, out var number1);
    double.TryParse(item.SubItems[columnIndex2].Text, out var number2);

    column1Sum += number1;
    column2Sum += number2;
}
 

卡卡西莫

成员
已加入
2020年12月16日
留言内容
8
编程经验
Beginner
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace StockPOS
{
    public partial class Cashys : Form
    {
        SqlDataAdapter adapter;
        DataTable table;
        SqlCommand cmd;

        public Cashys()
        {
            InitializeComponent();
        }

        private void TextBox10_TextChanged(object sender, EventArgs e)
        {

        }

        private void Button1_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form1 dish = new Form1();
            dish.Show();
        }

        private void Productsbutton_Click(object sender, EventArgs e)
        {
            this.Hide();
            Products dish = new Products();
            dish.Show();
        }

        private void Depositsbutton_Click(object sender, EventArgs e)
        {
            this.Hide();
            Deposits dish = new Deposits();
            dish.Show();
        }

        private void Button3_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form1 dish = new Form1();
            dish.Show();
        }

        private void Panel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void Cashys_Load(object sender, EventArgs e)
        {
            listView1.GridLines = true;
            listView1.View = View.Details;
            listView1.FullRowSelect = true;


            listView1.Columns.Add("Product Name", 150);
            listView1.Columns.Add("Price", 150);
            listView1.Columns.Add("Qty",150);
            listView1.Columns.Add("Total", 150);
          
        }
       
        public void SearchData(String ValueToSearch)
        {
          
            using (SqlConnection con = new SqlConnection(Properties.ApplicationSetting.ConnectionString()))
            {
              
                using (SqlCommand Query = new SqlCommand("usp_query", con))
                {
                    con.Open();
                    adapter = new SqlDataAdapter(cmd);
                    table = new DataTable();
                    adapter.Fill(table);
                    con.Close();

                }


            }
        }
     

        private void Search_Click(object sender, EventArgs e)
        {
            String Source = "Data Source=KAKASHI; Initial Catalog=SunvicDesigns; Trusted_Connection=Yes";
            SqlConnection con = new SqlConnection(Source);
            con.Open();
            MessageBox.Show("Connected to database");
            String SqlSelectQuery = "SELECT ProductName,ProductSize,ProductPrice FROM ProductDetails WHERE ProductID = " + int.Parse(ProductIDtxtBox3.Text);
            SqlCommand cmd = new SqlCommand(SqlSelectQuery, con);
            SqlDataReader dr = cmd.ExecuteReader();
          

            if (dr.Read())
            {
                pname.Text = (dr.GetValue(0).ToString());
                ProductsSizetextBox1.Text = (dr.GetValue(1).ToString());
                pricy.Text = (dr.GetValue(2).ToString());
               
            }
            con.Close();
        }

        private void Void_Click(object sender, EventArgs e)
        {
            String[] arr = new String[4];
            arr[0] = pname.Text ;
            arr[2] = qtytextBox.Text;
            arr[1] = pricy.Text ;
            ;
            double f1, g1, j;
            double.TryParse(qtytextBox.Text, out f1); double.TryParse(pricy.Text, out g1);
            j = f1 * g1;
            if (j > 0)

                arr[3] = j.ToString();


            ListViewItem listy = new ListViewItem(arr);
            listView1.Items.Add(listy);

          

        }

        private void ListView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void TottextBox_TextChanged(object sender, EventArgs e)
        {
          
        }
    }
}


我需要找到第4列的总和
 
由主持人最后编辑:

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,048
地点
挪威
编程经验
10+
我固定了这样的帖子:

insertcode.png
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,530
地点
弗吉尼亚州切萨皮克
编程经验
10+
叹。将View用作数据模型是一种非常糟糕的做法。因此,您要查询具有特定ID的项目,然后将值放入文本框。然后,如果单击了按钮,则可以从文本框中获取值并将其粘贴到列表视图中。现在,您要汇总列表视图第4列中的值。

当PC的RAM和CPU有限时,这是做事的老方法。正确的现代方法是使用视图仅反映数据模型的值。使用MVC,MVP,MVVM等模式之一。将您的数据从数据库I中拉出并放入一个临时对象。单击该按钮后,将该临时对象添加到列表中。将他们listview绑定到该列表。要计算列的总和,请遍历列表项并计算总和。
 
最佳 底部