自已做的带合计栏的DataGridView,帮助看看效果怎么样.

liohoym 2009-12-20 03:39:19
思路:在DataGridView下面动态添加一Panel;
Panel里面放TextBox(需要合计的才有这个TextBox)

已实现的效果:
1 动态加载(运行时)Panel及里面的TextBox(自定属性:是否要加合计栏,哪些列要加合计栏)
2 调整列宽时,合计栏自动调整体宽度.

待实现功能:
1 自动计算:合计列的数据改变时,合计数据自动变化.
2 添加标题.
3 分类型进行处理:是要汇总,平均,还是取最大最小值等等

学得时间不长,请大家指导一下.有没可能将这个放在表格里面去?

先放个图.功能还没全部完成,这个是正式的类.


这个是草稿,功能更多些,数据计算全部弄好了的.


...全文
1147 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
a123456603 2010-11-25
  • 打赏
  • 举报
回复
源码呢?
lenovore 2010-08-07
  • 打赏
  • 举报
回复
look look
youcaihua123 2010-08-01
  • 打赏
  • 举报
回复
xuexi
ft1712081 2010-08-01
  • 打赏
  • 举报
回复
个人感觉在DataGridView里面实现还是比较复杂的,不如直接在下面再放两个Label来实现。
liohoym 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 carlxj 的回复:]
嘿嘿,不错,有创意,如果美化美化那就太妙了,楼主会c#的软件美化吗?找了很久都没有这方面的···帮up
[/Quote]

晕了啊.我在美化方面最差劲了.做的报表老板给的评价四个字 顶天立地:报表头顶到纸的顶端,报表尾到了打印机无法再打印的底部.

个人审美观太差了...
liohoym 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 wangshiwei1105 的回复:]

顺便问一句,lz有没有将panel的parent设为DataGridView?
[/Quote]

没有.
我是将在DataGridView构造时,在DataGridView.parent上加的一个Panel.
Panel的名字为"Pantl" + DataGridView.name

昨天试了一下,还有几个要处理:
1 拖动滚动条时,合计栏刷新;
2 窗口最大小最小化时,如果DataGridView的大小发生变化时,刷新合计栏.
天地英豪 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 liohoym 的回复:]
如果是数据绑定呢?同时使用DataGridView输入数据时怎么处理??

您这种方法实现起来是简单,但是使用起来诸多不便啊.
[/Quote]
有个想法,自己编程控制什么时候添加行,比如说在倒数第二行且是endedit后检查行合法性,然后手动插入一行。至于说数据绑定,也可以在数据源上手动添加一行。说说容易做起来就要看个人的了,呵!
顺便问一句,lz有没有将panel的parent设为DataGridView?
liohoym 2009-12-22
  • 打赏
  • 举报
回复
我加这个合计栏的目地就是为了能在DataGridView中进行数据输入.
liohoym 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 projectdd 的回复:]
楼主 追求态度 可嘉,可不可 为了实用简单点,比如 在这个datagridview控件未尾 加一行,然后
显示合计结果 这样不省事又方便吗?
[/Quote]

如果是数据绑定呢?同时使用DataGridView输入数据时怎么处理??

您这种方法实现起来是简单,但是使用起来诸多不便啊.
ProjectDD 2009-12-22
  • 打赏
  • 举报
回复
上面合计部分有错重新来一张

ProjectDD 2009-12-22
  • 打赏
  • 举报
回复
ProjectDD 2009-12-22
  • 打赏
  • 举报
回复
楼主 追求态度 可嘉,可不可 为了实用简单点,比如 在这个datagridview控件未尾 加一行,然后
显示合计结果 这样不省事又方便吗?
liohoym 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wartim 的回复:]
合计行做到datagridview里也不是不可以,就是控制起来会比较繁琐
....
[/Quote]

试过了,有个问题不知道怎么解决:当表格里的最后一行如果需要编辑时,合计行就挡住了这一行的位置.




还有一个问题,不知道是不是我不知道怎么处理.当宽度调整时,合计栏上会出现调整后留下的影子...


以我的水平,看来暂时只能将合计栏放在表格之外了.有高人指导一下,解决这两个问题的话放在里面应该是没问题的.
再稍稍完善一点我将类放上来.
wuyq11 2009-12-20
  • 打赏
  • 举报
回复
在datagridview中添加合并行
datagridview
  • 打赏
  • 举报
回复
LZ能不能告诉我一下,你的图片是怎么发上来的
特别 2009-12-20
  • 打赏
  • 举报
回复
不错
每天顶顶更健康
wartim 2009-12-20
  • 打赏
  • 举报
回复
这个DataGridViewEx 没用。。。。测试用的

普通的DataGridView就可以,主要就是设置rowcount,让底下留出位置
wartim 2009-12-20
  • 打赏
  • 举报
回复
合计行做到datagridview里也不是不可以,就是控制起来会比较繁琐




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication25
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

DataGridViewEx DGV = new DataGridViewEx();
DGV.Parent = this;
DGV.Dock = DockStyle.Fill;

DGV.Columns.Add("c1", "c1");
DGV.Columns.Add("c2", "c2");
DGV.Columns.Add("c3", "c3");

DGV.Rows.Add(100);
DGV.RowCount = 5;

Panel P = new Panel();
P.Parent = DGV;
P.BackColor = Color.Gray;
P.Size = new Size(1000 - DGV.RowHeadersWidth, 30);
P.Location = new Point(0, DGV.ClientRectangle.Bottom - SystemInformation.HorizontalScrollBarHeight- P.Height);

new TextBox().Parent = P;
}

class DataGridViewEx : DataGridView
{
protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex > 10 )
{
e.Graphics.Clear(Color.Gray);
}
else
base.OnCellPainting(e);
}
}
}
}
freeboy827 2009-12-20
  • 打赏
  • 举报
回复
不错
ProjectDD 2009-12-20
  • 打赏
  • 举报
回复
看样子是状态栏上做的效果,主要就是 获取一下,每列的宽然后加起来,给这个合计栏控件
另外就是看需要显示或隐藏合计栏控件 。
加载更多回复(4)

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧