datagridview 为什么没有合计行 http://www.cnblogs.com/xvqm00/archive/2009/02/17/1392282.html 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写了一个例子: private void Form1_Load(object sender, EventArgs e) { dataGridView1.DataSource = GetData(); } private void button1_Click(object sender, EventArgs e) { DataGridView gw =dataGridView1; TotalRow(gw); } #region 合计行 public void TotalRow(DataGridView dg) { DataGridViewRow dgr = dg.Rows[dg.Rows.Count - 1]; dgr.ReadOnly = true; dgr.DefaultCellStyle.BackColor = System.Drawing.Color.Khaki; dgr.Cells[0].Value = "合计"; for (int i = 0; i < dg.Rows.Count - 1; i++) { dgr.Cells[2].Value = Convert.ToSingle(dgr.Cells[2].Value) + Convert.ToSingle(dg.Rows[i].Cells[2].Value); } } #endregion private System.Data.DataTable GetData() { System.Data.DataTable tableInfo = new System.Data.DataTable(); DataColumn dctime = new DataColumn("Time", Type.GetType("System.String")); DataColumn dcCity = new DataColumn("City", Type.GetType("System.String")); DataColumn dcCount = new DataColumn("Count", Type.GetType("System.Int32")); tableInfo.Columns.Add(dctime); tableInfo.Columns.Add(dcCity); tableInfo.Columns.Add(dcCount); DataRow dr = tableInfo.NewRow(); dr["Time"] = "1:00"; dr["City"] = "10"; dr["Count"] = "15"; tableInfo.Rows.Add(dr); DataRow dr1 = tableInfo.NewRow(); dr1["Time"] = "2:00"; dr1["City"] = "12"; dr1["Count"] = "19"; tableInfo.Rows.Add(dr1); DataRow dr2 = tableInfo.NewRow(); dr2["Time"] = "3:00"; dr2["City"] = "13"; dr2["Count"] = "25"; tableInfo.Rows.Add(dr2); DataRow dr3 = tableInfo.NewRow(); dr3["Time"] = "4:00"; dr3["City"] = "14"; dr3["Count"] = "10"; tableInfo.Rows.Add(dr3); DataRow dr4 = tableInfo.NewRow(); dr4["Time"] = "5:00"; dr4["City"] = "15"; dr4["Count"] = "11"; tableInfo.Rows.Add(dr4); DataRow dr5 = tableInfo.NewRow(); dr5["Time"] = "6:00"; dr5["City"] = "16"; dr5["Count"] = "17"; tableInfo.Rows.Add(dr5); DataRow dr6 = tableInfo.NewRow(); dr6["Time"] = "7:00"; dr6["City"] = "17"; dr6["Count"] = "20"; tableInfo.Rows.Add(dr6); DataRow dr7 = tableInfo.NewRow(); dr7["Time"] = "8:00"; dr7["City"] = "12"; dr7["Count"] = "13"; tableInfo.Rows.Add(dr7); return tableInfo; } 可以 在数据库中 查询数据的时候,把合计也查询出来 ,返回dataTable,绑定。再者 可以使用Devexpress中的DataGrid定义合计。http://blog.csdn.net/duanzi_peng/article/details/17793667 楼上做法我在网上也看到过,一直没明白这么基础的东西,微软的控件为什么会没有。http://www.cnblogs.com/NetWZ/archive/2010/10/27/1862097.html这个看起来稍微好看点 你这都是废话,我们应该关注我们的东西,而不是在这些破事上展示技能。delphi这么古老的东西在这一点上上就实现的很完美了,C#到现在还没有。这不是不思进取吗?你还在这里为微软开脱 to: wangnaisheng 不好意思啊我是说jointan这位的,不小心点错了 你太年轻,不知水深浅,我最近就被Microsoft Dynamic CRM这个产品给搞悖了,当你感到一个新产品做了太多本来应该你做的事时,你才会明白不让它去替你完成一件你不想做的事有多难. 当年我极度的想在VB中实现PB的DataWindow,后来C#出来了,这个想法一下变得非常容易实现,但后来,我再也没有编过类似DataWindow产品,估计和你的这个想法差不多. 嗯,没玩过delphi,但2楼的方法可行,你也可以在datasource里自己添加一行,再用循环的方式相加,我更喜欢在datasource里做文章。我最近几个月一直在做数据挖掘,碰到很多有意思的问题,我对微软的framework不能跨平台运行一直很不满意,其技术应该早就解决这类问题,但现在还只能用第三方模拟来实现,如果能实现跨平台,这是多么有美好,扯远了。如果delphi能做自动做出合计的功能,那我举几个例子,如果第一列需要合计,那“合计”这两个字放哪?如果列的类型是string,但里面存的某行是数字某行是非数字,它又怎么实现合计?如果是指定列,那如果我需要最下面多出个列来实现合计中的合计又怎么实现?以上问题纯是感兴趣问问,并不是为了微软开脱,微软在简单的合计上确实需要增加一个功能,其本身也不难,可能就是太简单了,所以忽视了。 你没用过delphi而已,随便那一列都可以方便的计算求和,行数,静态都可以设置格式的 comboBox的问题。 C截取字符串 批量增加记录 C#中自带报表的问题? Enum是值类型还是引用? 小弟刚做winforms不久,有个控件对齐的问题请教大家! 有什么控件库可以截获指定进程的网络动作麽?(指定进程的封包截获如何做?) 求助啊,为什么gridview上显示不出数据- - c# button给textbox1追加值 c#的WEB控件中没有Windows控件中的那种下拉日期选择控件,哪里能找到? C# 内存莫名奇妙溢出 哪位大侠有功能完整的JMail.dll,可以收发邮件,不受限制的。
写了一个例子:
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = GetData();
}
private void button1_Click(object sender, EventArgs e)
{
DataGridView gw =dataGridView1;
TotalRow(gw);
}
#region 合计行
public void TotalRow(DataGridView dg)
{
DataGridViewRow dgr = dg.Rows[dg.Rows.Count - 1];
dgr.ReadOnly = true;
dgr.DefaultCellStyle.BackColor = System.Drawing.Color.Khaki;
dgr.Cells[0].Value = "合计";
for (int i = 0; i < dg.Rows.Count - 1; i++)
{
dgr.Cells[2].Value = Convert.ToSingle(dgr.Cells[2].Value) + Convert.ToSingle(dg.Rows[i].Cells[2].Value);
}
}
#endregion
private System.Data.DataTable GetData()
{
System.Data.DataTable tableInfo = new System.Data.DataTable(); DataColumn dctime = new DataColumn("Time", Type.GetType("System.String"));
DataColumn dcCity = new DataColumn("City", Type.GetType("System.String"));
DataColumn dcCount = new DataColumn("Count", Type.GetType("System.Int32"));
tableInfo.Columns.Add(dctime);
tableInfo.Columns.Add(dcCity);
tableInfo.Columns.Add(dcCount);
DataRow dr = tableInfo.NewRow();
dr["Time"] = "1:00";
dr["City"] = "10";
dr["Count"] = "15";
tableInfo.Rows.Add(dr);
DataRow dr1 = tableInfo.NewRow();
dr1["Time"] = "2:00";
dr1["City"] = "12";
dr1["Count"] = "19";
tableInfo.Rows.Add(dr1);
DataRow dr2 = tableInfo.NewRow();
dr2["Time"] = "3:00";
dr2["City"] = "13";
dr2["Count"] = "25";
tableInfo.Rows.Add(dr2);
DataRow dr3 = tableInfo.NewRow();
dr3["Time"] = "4:00";
dr3["City"] = "14";
dr3["Count"] = "10";
tableInfo.Rows.Add(dr3); DataRow dr4 = tableInfo.NewRow();
dr4["Time"] = "5:00";
dr4["City"] = "15";
dr4["Count"] = "11";
tableInfo.Rows.Add(dr4); DataRow dr5 = tableInfo.NewRow();
dr5["Time"] = "6:00";
dr5["City"] = "16";
dr5["Count"] = "17";
tableInfo.Rows.Add(dr5); DataRow dr6 = tableInfo.NewRow();
dr6["Time"] = "7:00";
dr6["City"] = "17";
dr6["Count"] = "20";
tableInfo.Rows.Add(dr6); DataRow dr7 = tableInfo.NewRow();
dr7["Time"] = "8:00";
dr7["City"] = "12";
dr7["Count"] = "13";
tableInfo.Rows.Add(dr7);
return tableInfo;
}
再者 可以使用Devexpress中的DataGrid定义合计。
http://blog.csdn.net/duanzi_peng/article/details/17793667
这个看起来稍微好看点
你这都是废话,我们应该关注我们的东西,而不是在这些破事上展示技能。delphi这么古老的东西在这一点上上就实现的很完美了,C#到现在还没有。这不是不思进取吗?你还在这里为微软开脱
你太年轻,不知水深浅,我最近就被Microsoft Dynamic CRM这个产品给搞悖了,当你感到一个新产品做了太多本来应该你做的事时,你才会明白不让它去替你完成一件你不想做的事有多难.
如果列的类型是string,但里面存的某行是数字某行是非数字,它又怎么实现合计?
如果是指定列,那如果我需要最下面多出个列来实现合计中的合计又怎么实现?以上问题纯是感兴趣问问,并不是为了微软开脱,微软在简单的合计上确实需要增加一个功能,其本身也不难,可能就是太简单了,所以忽视了。
都可以设置格式的