报表之惑 您所在的位置:网站首页 excel如何在最后一行添加行 报表之惑

报表之惑

2023-12-29 01:25| 来源: 网络整理| 查看: 265

“众里寻她千百度,蓦然回首,那人却在,灯火阑珊处。”词虽好,但现实比非如此,最近做项目也是碰到了头疼的事,虽然网上关于报表添加总计行的方法很多,但总是让人不知所云,所以自己尝试下这篇博客,我的方法是在DataGridview最后一行添加“合计”行,并保证最后一行不参与排序。 思想:”程序的方法固然重要,但思想是前提“,之前尝试直接在Datagridview添加合计行,发现总是行不通,所有打算直接在绑定数据源时添加。 首先:这是在datagridview中添加行,必备工具我这里不废话(Form,DataGridview控件,DataGridview各字段绑定数据源)。 第一步:右击Form—-查看代码—-添加方法

private void AddTotalRow(DataGridView dg) { MySQLHelper dbHelper = new MySQLHelper();//这里我直接用封装的类库,需要这个的可以发邮件给我[email protected] dbHelper.creatCommand("SQL语句");//关于C#如何操作数据库和绑定数据源,相信应该都会吧,有疑问的可以发邮件给我 DataTable addTotalRow = dbHelper.executeQuery(); //执行SQL语句 //计算总输入 Decimal totalCost = 0; DataRow newRow = addTotalRow.NewRow(); for (int i = 0; i < addTotalRow.Rows.Count; i++) { totalCost += Convert.ToDecimal(addTotalRow.Rows[i][14].ToString());//这里14代表我的表格中第14列是价格,这个没有统一标准 } newRow["cost"] = totalCost;//cost是Datatable的字段,表示在cost这个字段添加一个为totalCost的数据 newRow["id"] = "合计:"+ totalCost;//在Datatable中id这个字段添加"合计"和totalCost,这里需说明下,合计这个属性的位置按照个人需求添加,我是在id行添加 addTotalRow.Rows.Add(newRow);//把新创建的"合计"行添加到Datatable中 dataGridViewAddTotalRow.DataSource = addTotalRow; KeepYellow(dataGridViewAddTotalRow); }

第二步:使最后一行保持颜色不变

/** *使最后一行保持黄色,颜色按个人喜好设置(这里不表示我喜欢"黄色",各位别多想) */ private void KeepYellow(DataGridView dg) { DataGridViewRow keepYellow = dg.Rows[dg.Rows.Count - 1];//取出最后一行 keepYellow.ReadOnly = true;//设置此行不可编辑 keepYellow.DefaultCellStyle.BackColor = System.Drawing.Color.Yellow;//设置行颜色为黄色 }

第三步:使最后一行不参与排序,需要添加两个事件,CellMouseClick事件和Sorted时间(方法双击事件,自动添加)

/** *功能:最后一行不参与排序 *日期:2015/3/14 */ List dataExceptLastRow = new List();//List集合存储最后一行 int currentColumnIndex = 0;//保存当前行的索引 private void dataGridViewAddTotalRow_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { if (e.RowIndex >= 0 || dataGridViewAddTotalRow.Rows.Count == 0) return; if (dataExceptLastRow.Count == 0) { currentColumnIndex = e.ColumnIndex;//将当前列赋值给colindex int index = dataGridViewAddTotalRow.Rows.Count - 1; //排除最后一行 dataExceptLastRow.Add(((DataTable)dataGridViewAddTotalRow.DataSource).Rows[index].ItemArray);//将DataTable中所有值添加到List数组,除最后一行(总计行) dataGridViewAddTotalRow.Rows.Remove(dataGridViewAddTotalRow.Rows[dataGridViewAddTotalRow.Rows.Count - 1]);//从DataTable中输出最后一行(总计行) AddTotalRow(dataGridViewAddTotalRow); } } private void dataGridViewAddTotalRow_CellSorted(object sender, EventArgs e) { if (dataExceptLastRow.Count == 0) return; DataTable dt = ((DataTable)dataGridViewAddTotalRow.DataSource);//重新绑定数据源 DataView dv = dt.DefaultView;//因为DataTable没有排序的功能,所有转换成DataView dv.Sort = dt.Columns[currentColumnIndex].ColumnName; dt = dv.ToTable();//转换成DataTable类型 dt.Rows.Add(dataExceptLastRow[0]); dataExceptLastRow.Clear(); dataGridViewAddTotalRow.DataSource = dt; AddTotalRow(dataGridViewAddTotalRow); }

最后,请多多指教!谢谢!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有