datagridview添加合计行 要实现根据列的宽度 改变宽度可以根据列的位置变换(手动拖动列,改变顺序) 而变换位置总是在最低层(重新排序后) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 上网去下一个 Developer Express 这个就可以了 public void TotalRow(DataGridView dg) { dg.Rows.Add(); 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[3].Value = Convert.ToSingle(dgr.Cells[3].Value) + Convert.ToSingle(dg.Rows[i].Cells[3].Value); } } //给数据源添加合计行,数据源中加了合计行,DataGridView中绑定之后,也会有相应的合计行public static void SumDataTable(DataTable dt,String columnNames) { if (dt == null || dt.Rows.Count == 0) { return; } Decimal[] decArray = new Decimal[dt.Columns.Count]; int[] flagArray = new int[dt.Columns.Count]; bool flag = false; for (int i = 0; i < decArray.Length; i++) { decArray[i] = 0; } for (int i = 0; i < dt.Columns.Count; i++) { flagArray[i] = 0; if (dt.Columns[i].DataType == System.Type.GetType("System.Decimal") || dt.Columns[i].DataType == System.Type.GetType("System.Double") || dt.Columns[i].DataType == System.Type.GetType("System.Int32") ) { if (columnNames == null) { flagArray[i] = 1; } else { flagArray[i] = columnNames.IndexOf(dt.Columns[i].ColumnName) >= 0 ? 1 : 0; } } if (!flag && dt.Columns[i].DataType == System.Type.GetType("System.String")) { flagArray[i] = -1; flag = true; } if ((dt.Columns[i].ColumnName == "Year") || (dt.Columns[i].ColumnName == "Month")) { flagArray[i] = 0; } } foreach (DataRow dr in dt.Rows) { for (int i = 0; i < flagArray.Length; i++) { if (flagArray[i] == 1) { decArray[i] += MyConvert.toDecimal((dr[i]is DBNull)?"0": dr[i].ToString()); } } } DataRow drSum = dt.NewRow(); for (int i = 0; i < flagArray.Length; i++) { if (flagArray[i] == -1) { drSum[i] = "<合计>"; } if (flagArray[i] == 1) { drSum[i] = decArray[i]; } } dt.Rows.Add(drSum); } 当然这个方法有待简化和优化,只是提供一个思路。这种方法支持所有数字列的自动求和总计。另外是换数据控件,用第三方控件来实现汇总行的显示。如Janas控件中GridEX 请感兴趣的高手共同讨论。。。 求助..简单问题 先谢谢各位 c#虚基类问题 关于C#遍历类成员并且得到他们的值 图象灰度曲线的绘制? EXCEL表导入到数据库出了点问题...高手请帮帮忙!!!!!! 急!(等...) 大家好,小弟想请教一个关于2窗体间的textbox的值的传递问题,谢谢 我的C#程序运行一下就出现内存不足的错误,C#不是自己处理内存的吗? 请问一个c#控件一般包哪几种文件?down下的控件怎么安装,请具体点? 如何将类型“A.B.C”强制转换为“int” 选取表里的某一列 信息,怎么操作
{
dg.Rows.Add();
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[3].Value = Convert.ToSingle(dgr.Cells[3].Value) + Convert.ToSingle(dg.Rows[i].Cells[3].Value);
}
}
//给数据源添加合计行,数据源中加了合计行,DataGridView中绑定之后,也会有相应的合计行
public static void SumDataTable(DataTable dt,String columnNames)
{
if (dt == null || dt.Rows.Count == 0)
{
return;
}
Decimal[] decArray = new Decimal[dt.Columns.Count];
int[] flagArray = new int[dt.Columns.Count];
bool flag = false;
for (int i = 0; i < decArray.Length; i++)
{
decArray[i] = 0;
}
for (int i = 0; i < dt.Columns.Count; i++)
{
flagArray[i] = 0;
if (dt.Columns[i].DataType == System.Type.GetType("System.Decimal")
|| dt.Columns[i].DataType == System.Type.GetType("System.Double")
|| dt.Columns[i].DataType == System.Type.GetType("System.Int32")
)
{
if (columnNames == null)
{
flagArray[i] = 1;
}
else
{
flagArray[i] = columnNames.IndexOf(dt.Columns[i].ColumnName) >= 0 ? 1 : 0;
} }
if (!flag && dt.Columns[i].DataType == System.Type.GetType("System.String"))
{
flagArray[i] = -1;
flag = true;
}
if ((dt.Columns[i].ColumnName == "Year")
|| (dt.Columns[i].ColumnName == "Month"))
{
flagArray[i] = 0;
}
}
foreach (DataRow dr in dt.Rows)
{
for (int i = 0; i < flagArray.Length; i++)
{
if (flagArray[i] == 1)
{
decArray[i] += MyConvert.toDecimal((dr[i]is DBNull)?"0": dr[i].ToString()); }
}
}
DataRow drSum = dt.NewRow();
for (int i = 0; i < flagArray.Length; i++)
{
if (flagArray[i] == -1)
{
drSum[i] = "<合计>";
}
if (flagArray[i] == 1)
{
drSum[i] = decArray[i];
}
}
dt.Rows.Add(drSum);
}
当然这个方法有待简化和优化,只是提供一个思路。这种方法支持所有数字列的自动求和总计。
另外是换数据控件,用第三方控件来实现汇总行的显示。如Janas控件中GridEX