请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

ud7070

初级会员

23

主题

97

帖子

312

积分

初级会员

积分
312

微信认证勋章

ud7070
初级会员   /  发表于:2015-11-11 16:43  /   查看:11914  /  回复:7
C1FlexGrid 单元格或列边框样式是否可像 excel 那样自由设置?

1.设置 某一列或单元格 左右边框为双实线,上下边框为单实线
2.设置 某一列或单元格 左边框线为红色,右边框线为黑色

是否可以实现?谢谢!

7 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-11-11 17:47:00
沙发
回复 1楼ud7070的帖子

谢谢您的反馈。
对于您的问题,C1FlexGrid没有提供接口可以单独的设置左边框或是右边框,而是整个单元格的边框。
如果想要实现这种效果,建议使用OwerDrawCell自己画边框。
附件有个例子,您可以参考:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
ud7070
初级会员   /  发表于:2015-11-12 13:52:00
板凳
回复 2楼Alice的帖子

那个例子运行了一下好像也不行。

还有我看了一下,是不是这个格式是按单元格设置的,所以没办法在一个单元格的四条边设置为不同的格式?
CellStyle c = c1FlexGrid.Styles.Add("ColStyle");
c.Border.Color = Color.LightSkyBlue;
c.Border.Direction = BorderDirEnum.Vertical;
c.Border.Style = BorderStyleEnum.Double;
这样是可以设置左右两边的边框为双实线,但是如果还要设置上下为单实线怎么办?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-12 15:20:00
地板
回复 3楼ud7070的帖子

谢谢反馈。
您可以通过OwnerDraw事件自己画单元格的边框。
将C1FlexGrid的DrawMode设置为OwnerDraw,然后再OwnerDraw事件里重画Cell的边框。
  1. void c1FlexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
  2.         {
  3.             if (e.Row == 2 && e.Col == 2)
  4.             {
  5.                 e.Graphics.DrawRectangle(Pens.Blue, e.Bounds);
  6.                 e.DrawCell(DrawCellFlags.All);
  7.             }
  8.         }
复制代码

e.Graphics用的是微软的Graphics方法来绘制的。
拿到这个Graphics,可以实现任意的画法,画线,改变颜色。
Graphics.DrawRectangle 方法可以绘制由坐标对、宽度和高度指定的矩形。具体的语法可以参考msdn:
http://msdn.microsoft.com/zh-cn/ ... phics.DrawRectangle(v=vs.110).aspx
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
ud7070
初级会员   /  发表于:2015-11-12 17:17:00
5#
回复 4楼Alice的帖子

这样写了之后,确实可以通过e.Graphics.DrawRectangle用坐来画线了:

  1. private void fgGroupDetail_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
  2.         {
  3.             if ((e.Row >= this.fgGroupDetail.Rows.Fixed) & (e.Col ==(this.fgGroupDetail.Cols.Fixed - 1)))
  4.             {
  5.                 e.Text = ((e.Row - this.fgGroupDetail.Rows.Fixed) + 1).ToString();
  6.             }

  7.             Pen bluePen = new Pen(Color.LightSkyBlue);
  8.             bluePen.Width = 0.5F;
  9.             if (e.Col<=8)
  10.             {
  11.                 e.Graphics.DrawRectangle(bluePen, e.Bounds.X, e.Bounds.Y, 1, e.Bounds.Height);
  12.                 e.DrawCell(DrawCellFlags.All);
  13.             }
  14.             if(e.Col==10)
  15.             {
  16.                 e.Graphics.DrawRectangle(bluePen, e.Bounds.X + e.Bounds.Width, e.Bounds.Y, 0, e.Bounds.Height);
  17.                 e.DrawCell(DrawCellFlags.All);
  18.             }
  19.         }
复制代码


但是还有问题没解决:
1. 双实线的问题
2. 用e.Graphics.DrawRectangle 时,线宽是整数,会覆盖 pen 的线宽设置
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-12 17:45:00
6#
回复 5楼ud7070的帖子

谢谢您的反馈。
整个单元格的Bounds您是可以拿到的,至于要画成什么样都有Graphics画法决定。
e.Graphics还有DrawLine, DrawPath等等,不管是什么样的线都可以画出来。
具体的画法建议你搜索下微软的msdn。

--&gt;2. 用e.Graphics.DrawRectangle 时,线宽是整数,会覆盖 pen 的线宽设置
很抱歉不理解这句话的意思。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
wxw
初级会员   /  发表于:2015-11-13 15:26:00
7#
楼主 flexgrid的单元格格式设置实现了吗 能分享一下吗
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-13 17:30:00
8#
回复 7楼wxw的帖子

您可以使用4楼的思路画不同的边框。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部