找回密码
 立即注册

QQ登录

只需一步,快速开始

junlingzhu2002

银牌会员

38

主题

150

帖子

3344

积分

银牌会员

积分
3344

活字格认证

junlingzhu2002
银牌会员   /  发表于:2012-12-18 16:02  /   查看:6354  /  回复:4
画面按照日期的顺序来表示,如果日期相同,那么只在相同日期的Cell的第一行表示这个值,
但如果移动Scrool,那么这个日期就会随着Scrool的移动而移动。
也就是说,这个日期总是出现在画面表示的相同日期的第一行。
比如第一行到第十行的日期为20121217,如果第一行在画面的第一行时,
第一行日期显示20121217,第二行到第十行的日期是空白;
移动Scrool使现在的第5行表示在画面的第一行时,第5行日期显示20121217

4 个回复

倒序浏览
junlingzhu2002
银牌会员   /  发表于:2012-12-18 16:04:00
沙发
这个怎么实现
回复 使用道具 举报
wedy.wang
初级会员   /  发表于:2012-12-24 12:30:00
板凳
回复 2楼junlingzhu2002的帖子

这个在目前的版本无法实现。
我们的MultiRow For WinForm 7.0有这个功能,设置两个属性就可以解决了。
如果你是日文用户,可以考虑使用我们的7.0版本。谢谢。
回复 使用道具 举报
junlingzhu2002
银牌会员   /  发表于:2012-12-25 14:52:00
地板
谢谢,你说的是Cell的合并功能吗?
不过我需要的不是将相同值的Cell合并,
而是在滚动条发生变化时,日期总是出现在画面所表示的相同日期的第一行

本帖子中包含更多资源

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

x
回复 使用道具 举报
wedy.wang
初级会员   /  发表于:2012-12-25 18:00:00
5#
回复 4楼junlingzhu2002的帖子

我给你个SampleCode,有些地方可能不是很完善,请你再修改一下。
使用自定义DateTimePickerCell来实现。

  1.     public class MyDateTimePickerCell : DateTimePickerCell
  2.     {
  3.         protected override void PaintCellForeground(CellPaintingEventArgs e)
  4.         {
  5.             if (this.GcMultiRow != null && e.FormattedValue != null)
  6.             {
  7.                     if (this.ShouldDisplayText(e.FormattedValue, e.RowIndex, e.CellIndex))
  8.                     {
  9.                         base.PaintCellForeground(e);
  10.                     }
  11.             }
  12.             else
  13.             {
  14.                 base.PaintCellForeground(e);
  15.             }
  16.         }
  17.         bool ShouldDisplayText(object value, int currentRowIndex, int cellIndex)
  18.         {
  19.             for (int i = currentRowIndex - 1; i >= this.GcMultiRow.FirstDisplayedCellPosition.RowIndex; i--)
  20.             {
  21.                 if (i == -1)
  22.                 {
  23.                     break;
  24.                 }
  25.                 object valueAbove = this.GcMultiRow.GetValue(i, cellIndex);
  26.                 if (valueAbove == null)
  27.                 {
  28.                     return true;
  29.                 }

  30.                 if (object.Equals(((DateTime)value).Date, ((DateTime)valueAbove).Date))
  31.                 {
  32.                     return false;
  33.                 }
  34.             }

  35.             return true;
  36.         }
  37.     }
  38.     public partial class Form1 : Form
  39.     {
  40.         public Form1()
  41.         {
  42.             InitializeComponent();
  43.         }

  44.         private void Form1_Load(object sender, EventArgs e)
  45.         {
  46.             this.gcMultiRow1.Template = Template.CreateGridTemplate(new Cell[] {
  47.                 new MyDateTimePickerCell() {Format = DateTimePickerFormat.Short},
  48.                 new TextBoxCell(),
  49.                 new TextBoxCell()});
  50.             this.gcMultiRow1.RowCount = 5;
  51.             this.gcMultiRow1.Scroll += gcMultiRow1_Scroll;
  52.         }

  53.         void gcMultiRow1_Scroll(object sender, ScrollEventArgs e)
  54.         {
  55.             this.gcMultiRow1.InvalidateCell(0, 0);
  56.         }
  57.     }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部