【问题标题】:Group listview that have the data from sql具有来自 sql 的数据的组列表视图
【发布时间】:2016-12-04 00:55:01
【问题描述】:

我编写了一个将数据从 SQL 获取到 listview 的代码。 [here screenshot of the data pulled and shown on listview. ]1

如何使用 headid 在此列表视图上创建组。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Diagnostics;
using System.Data.Common;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Timers;
namespace AbhiProject{
public partial class daybook_credit : Form
{
    public daybook_credit()
    {
        InitializeComponent();
        BindGrid();
    }
    //int ID = 0;
    private SqlConnection con;
    private SqlCommand cmd;
    private SqlDataAdapter adapt;
    private DataTable dt;
    //Connection String
    string cs = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Abhilash\Documents\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\db_all.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
    private void BindGrid()
    {
        listView1.GridLines = true;
        listView1.View = View.Details;

        //Add Column Header

        listView1.Columns.Add("ID", 50);
        listView1.Columns.Add("Head ID", 150);
        listView1.Columns.Add("Date", 150);
        listView1.Columns.Add("Receipt No", 150);
        listView1.Columns.Add("Details", 150);
        listView1.Columns.Add("Cash Credit", 150);
        listView1.Columns.Add("Transfer Credit Adjustment", 150);

        con = new SqlConnection(cs);
        con.Open();


        // Chnage sql query and table name
        cmd = new SqlCommand("Select * from daybook_credit ORDER BY headid ASC", con);
        SqlDataReader Reader = cmd.ExecuteReader();

        listView1.Items.Clear();

        while (Reader.Read())
        {

            listView1.Items.Add(new ListViewItem(new string[] { Reader.GetInt32(0).ToString(), Reader.GetInt32(1).ToString(), Reader.GetString(2), Reader.GetString(3), Reader.GetString(4), Reader.GetInt32(5).ToString(), Reader.GetInt32(6).ToString() }, Reader.GetInt32(1).ToString()));



        }
        //MessageBox.Show(Reader.GetInt32(1).ToString());

        Reader.Close();
        con.Close();
    }

}}

我如何对这些数据进行分组,我也想知道是否可以找到每个组的现金信用总和

【问题讨论】:

  • DataGridView 始终是显示数据库数据的更好选择。无需添加列甚至行;最好的数据不是所有字符串,因此您可以正确管理数据
  • 但不能在 DataGridView 上进行分组

标签: c# listview


【解决方案1】:

其实你不能直接在gridview上进行分组,

相反,根据您的要求创建一个自定义 class

public class Sample
{
 public float TransferCredit { get; set; }
 public float CashCredit { get; set; }
 public DateTime Date { get; set; }
 public int HeadID { get; set; }
 public int ID { get; set; }
 public int RecieptNo { get; set; }
}

然后使用相同的并填充列表

List<Sample> result = new List<Sample>();
while (Reader.Read())
  {
   var Sample = new Sample
   {
     TransferCredit = reader.GetInt32(0),
     CashCredit = reader.GetString(1)
      ......
   }
 result.Add(foo);
}

然后你可以使用 linq 来做 GroupBy

 result.GroupBy(t => t.HeadID);

然后 bing 结果。

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2020-07-19
    • 2011-12-14
    • 2019-08-11
    相关资源
    最近更新 更多