找回密码
 立即注册

QQ登录

只需一步,快速开始

laonawuli

银牌会员

39

主题

146

帖子

3383

积分

银牌会员

积分
3383

活字格认证

laonawuli
银牌会员   /  发表于:2012-3-8 23:16  /   查看:6805  /  回复:5
首先,

LineBorder border1 = new LineBorder(Color.Black, 1, true, true, true, true);

for(int i=0 ; i< sheet.Columns.Count;i++)
{
    sheet.Columns.Border=border1 ;
}

然后,我想添加一些没有Border的行,于是:

sheet.AddUnboundRows(sheet.Rows.Count, 10);
for( int i=0;i<10;i++)
{
    sheet.Rows[sheet.Rows.Count - 1 - i].Border = null;
}
但是我发现这10行的Border仍然是border1
请问该如何做呢?

5 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2012-3-9 09:33:00
沙发

回复 1# laonawuli 的帖子

laonawuli 早上好,

首次设置边框时,应该以行为单位设置,Row.Default 设置添加行的样式。请参考下面代码:

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             this.fpSpread1.Sheets[0].RowCount = 10;
  4.             LineBorder border1 = new LineBorder(Color.Black, 1, true, true, true, true);

  5.             for (int i = 0; i < this.fpSpread1.Sheets[0].Rows.Count; i++)
  6.             {
  7.                 this.fpSpread1.Sheets[0].Rows[i].Border = border1;
  8.             }

  9.             this.fpSpread1.Sheets[0].Rows.Default.Border = null;
  10.             this.fpSpread1.Sheets[0].AddUnboundRows(this.fpSpread1.Sheets[0].Rows.Count, 10);
  11.         }

复制代码
回复 使用道具 举报
laonawuli
银牌会员   /  发表于:2012-3-9 09:51:00
板凳
原帖由 iceman 于 2012-3-9 9:33:00 发表
laonawuli 早上好,

首次设置边框时,应该以行为单位设置,Row.Default 设置添加行的样式。请参考下面代码:[code]
        private void Form1_Load(object sender, EventArgs e)
        {
            this.fpSpread1.Sheets[0].RowCount = 10;
   


早上好~
是这样的,我做的报表,查询的数据有时候会很多,如果按照行设置Border,未免太影响效率了。按列设置Border是最快的办法,而且,还设计到封边的问题,如果对行设置Border,不能达到我想要的效果。
就没别的方法吗?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-3-9 09:58:00
地板

回复 3# laonawuli 的帖子

可以啊,把行边框重新设置,Width 为 0即可。这样设置:

  1.             this.fpSpread1.Sheets[0].RowCount = 10;
  2.             LineBorder border1 = new LineBorder(Color.Black, 1, true, true, true, true);

  3.             for (int i = 0; i < this.fpSpread1.Sheets[0].Rows.Count; i++)
  4.             {
  5.                 this.fpSpread1.Sheets[0].Rows[i].Border = border1;
  6.             }

  7.         this.fpSpread1.Sheets[0].AddUnboundRows(this.fpSpread1.Sheets[0].Rows.Count, 10);
  8.             for (int i = 0; i < 10; i++)
  9.             {
  10.                 this.fpSpread1.Sheets[0].Rows[this.fpSpread1.Sheets[0].Rows.Count - 1 - i].Border = new LineBorder(Color.Black, 0, true, true, true, true); ;
  11.             }
复制代码
回复 使用道具 举报
laonawuli
银牌会员   /  发表于:2012-3-9 10:17:00
5#
原帖由 iceman 于 2012-3-9 9:58:00 发表
可以啊,把行边框重新设置,Width 为 0即可。这样设置:[code]
            this.fpSpread1.Sheets[0].RowCount = 10;
            LineBorder border1 = new LineBorder(Color.Black, 1, true, true, true, true);

            for (


非常感谢iceman,你的这种迂回战术解决了我的问题!
我想请教一下,为什么会这样呢?FP是不是这样处理的:
已经含有Border的Cell或者Row,直接将它们的Border设置为Null,Fp是不处理的?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-3-9 10:47:00
6#

回复 5# laonawuli 的帖子

不要客气哈,
原因是,表单、行、列 Border 设置是有优先级的,行>列>表单。也就是,如果行 Border 为 null,单元格将显示列 Border。Debug 状态下,可以看到,虽然行的 Border 设置为 null,但是列 Border 还是存在的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部