Scrool的移动伴随Cell内容的移动
画面按照日期的顺序来表示,如果日期相同,那么只在相同日期的Cell的第一行表示这个值,但如果移动Scrool,那么这个日期就会随着Scrool的移动而移动。
也就是说,这个日期总是出现在画面表示的相同日期的第一行。
比如第一行到第十行的日期为20121217,如果第一行在画面的第一行时,
第一行日期显示20121217,第二行到第十行的日期是空白;
移动Scrool使现在的第5行表示在画面的第一行时,第5行日期显示20121217 这个怎么实现 回复 2楼junlingzhu2002的帖子
这个在目前的版本无法实现。
我们的MultiRow For WinForm 7.0有这个功能,设置两个属性就可以解决了。
如果你是日文用户,可以考虑使用我们的7.0版本。谢谢。 谢谢,你说的是Cell的合并功能吗?
不过我需要的不是将相同值的Cell合并,
而是在滚动条发生变化时,日期总是出现在画面所表示的相同日期的第一行
回复 4楼junlingzhu2002的帖子
我给你个SampleCode,有些地方可能不是很完善,请你再修改一下。
使用自定义DateTimePickerCell来实现。
public class MyDateTimePickerCell : DateTimePickerCell
{
protected override void PaintCellForeground(CellPaintingEventArgs e)
{
if (this.GcMultiRow != null && e.FormattedValue != null)
{
if (this.ShouldDisplayText(e.FormattedValue, e.RowIndex, e.CellIndex))
{
base.PaintCellForeground(e);
}
}
else
{
base.PaintCellForeground(e);
}
}
bool ShouldDisplayText(object value, int currentRowIndex, int cellIndex)
{
for (int i = currentRowIndex - 1; i >= this.GcMultiRow.FirstDisplayedCellPosition.RowIndex; i--)
{
if (i == -1)
{
break;
}
object valueAbove = this.GcMultiRow.GetValue(i, cellIndex);
if (valueAbove == null)
{
return true;
}
if (object.Equals(((DateTime)value).Date, ((DateTime)valueAbove).Date))
{
return false;
}
}
return true;
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.gcMultiRow1.Template = Template.CreateGridTemplate(new Cell[] {
new MyDateTimePickerCell() {Format = DateTimePickerFormat.Short},
new TextBoxCell(),
new TextBoxCell()});
this.gcMultiRow1.RowCount = 5;
this.gcMultiRow1.Scroll += gcMultiRow1_Scroll;
}
void gcMultiRow1_Scroll(object sender, ScrollEventArgs e)
{
this.gcMultiRow1.InvalidateCell(0, 0);
}
}
页:
[1]