【问题标题】:How to draw rows on the bottom of the DataGridView?如何在 DataGridView 的底部绘制行?
【发布时间】:2009-07-16 13:34:23
【问题描述】:

我使用DataGridViewDataTable 作为某些值的堆栈。某些内容被记录到DataTable 行中,然后我以FIFO 方式将它们发送到某处 - 以底部-> 向上(堆叠)方向而不是向上-> 方向绘制行会非常好向下。

由于绘制事件仅对绘制单元格/单行有用,我该如何实现?

【问题讨论】:

  • 是否有列标题?他们应该在哪里?
  • 我会把它们放在首位。

标签: c# c++ winforms datagridview datatable


【解决方案1】:

编写一个自定义堆栈,将虚拟对象用于堆栈中的空槽。虚拟对象可以是具有空属性的静态对象。当您填充堆栈时,移除虚拟对象并在那里添加您的新项目。然后将此堆栈用作绑定源。堆栈末尾的虚拟对象确保 DataGridView 单元格中的第一行/顶部行是空的。这样您就无需费心修改 DataGridView 的行为。

【讨论】:

  • 这是我想要的行为的最佳(也是最简单)的近似值。
【解决方案2】:

对不起,我有点不清楚(我不确定它是底部对齐还是底部停靠或其他什么,所以我省略了那部分)。

但是,我还是想通了。 CellPainting 事件似乎不受单元格边界的限制,因此您可以简单地移动单元格边界矩形,如下所示:

Rectangle^ newRect = gcnew Rectangle(
    e->CellBounds.X, 
    DataGridView->Bounds.Bottom-e->CellBounds.Y, // this is the moving part
    e->CellBounds.Width,
    e->CellBounds.Height
);

需要考虑一些小的修改(如果底部滚动条可见,DataGridView 边界),但代码抓住了重点。

从远处看问题确实有效;)

编辑:是的,确实,这会将单元格从底部向上绘制,但它也会对垂直/水平滚动和窗口焦点更改产生一些时髦的影响。是的,没有标题单元格。回到绘图板。

【讨论】:

  • 我不认为这会奏效。您是否尝试过可见的垂直滚动条? (在许多其他反对意见中)。
  • 是的 - 两者都是可见的 - 垂直和水平。有趣的是,如果您保持原始方向,自定义单元格绘制事件可以毫无问题地工作。
猜你喜欢
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多