在網上搜了很多關於DataGridView合計行的設計及源碼,都不是很合我心意。於是自己寫了一個關於合計行的DLL。以后每次要用到合計行的時候只要引用這個DLL就可以了。
效果圖如下:
引用Dll:
附上例子源碼:

namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } TSumRow.TSumCols tsc = new TSumRow.TSumCols(); List<Jyinfo> ListJy = new List<Jyinfo>(); private void Form1_Load(object sender, EventArgs e) { DGV.AutoGenerateColumns = false; //禁止自動創建列 DGV.AllowUserToResizeColumns = false; //禁止自動調整列寬 } private void button1_Click(object sender, EventArgs e) { GetData(); } /// <summary> /// 獲取數據 /// </summary> private void GetData() { Jyinfo j = null; List<Jyinfo> listjy = new List<Jyinfo>(); using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=123456")) { conn.Open(); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = @"SELECT [Id],[Name],[Age],[Sl],[Zl],[Dj],[Je] FROM [dbo].[JyInfo]"; SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { j = new Jyinfo(); j.Id = Convert.ToInt32(reader["Id"]); j.Name = reader["Name"].ToString(); j.Age = Convert.ToInt32(reader["Age"]); j.Sl = Convert.ToInt32(reader["Sl"]); j.Zl = Convert.ToInt32(reader["Zl"]); j.Dj = Convert.ToInt32(reader["Dj"]); j.Je = Convert.ToInt32(reader["Je"]); listjy.Add(j); } reader.Close(); } ListJy = listjy; DGV.DataSource = ListJy; #region 匯總行 《以下就是顯示DataGridView合計行的代碼》 List<TSumRow.TColumns> listTc = new List<TSumRow.TColumns>(); TSumRow.TColumns Tc = new TSumRow.TColumns(); Tc.Col_Name = "Col_Id"; //DataGridView列的序號列列名 Tc.Col_Value = "合計:"; //要顯示在合計行的值 listTc.Add(Tc); Tc = new TSumRow.TColumns(); Tc.Col_Name = "Col_Name"; //DataGridView列的姓名列列名 var q = from b in ListJy group b by b.Name; Tc.Col_Value = q.Count().ToString();//匯總多少個客戶 listTc.Add(Tc); Tc = new TSumRow.TColumns(); Tc.Col_Name = "Col_dj"; //DataGridView列的單價列列名 Tc.Col_Value = string.Format("{0:F2}", ListJy.Average(a => a.Dj));//平均單價 listTc.Add(Tc); Tc = new TSumRow.TColumns(); Tc.Col_Name = "Col_je"; //DataGridView列的金額列列名 Tc.Col_Value = string.Format("{0:F2}", ListJy.Sum(a => a.Je)); ;//總的銷售額 listTc.Add(Tc); tsc.AddHz(listTc, DGV, pan); #endregion } } /// <summary> /// 交易信息實體類 /// </summary> [Serializable] public class Jyinfo { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public int Sl { get; set; } public int Zl { get; set; } public int Dj { get; set; } public int Je { get; set; } } }
合計我使用的是Panel對象。
定義對象:Panel對象名為pan,DataGridView對象名為DGV
合計行DLL下載鏈接(永久有效):http://pan.baidu.com/s/1c2mtZ1I
轉載請說明出處:http://www.cnblogs.com/haibing0107/p/6823516.html 作者:塗山呂呂