【问题标题】:Drawing lines in a DataGridView through rows通过行在 DataGridView 中绘制线条
【发布时间】:2012-04-09 09:10:12
【问题描述】:

我正在尝试通过 DataGridView 中的行绘制线条。这个想法是完成甘特图。现在我可以画出柱子了。但是当一个任务之前有另一个任务时,我需要画一条连接它们的线。

这就是我现在的位置:

我需要将连接器绘制为椭圆中的“Tarea 6”和“Tarea 7”

【问题讨论】:

  • 您是如何绘制甘特图红/蓝条的?是什么阻止您使用相同的方法来绘制连接器?
  • @digEmAll。所有的条都绘制在一个独特的单元格中,覆盖 OnCellPaint。红色表示任务延迟,黑色表示准时。蓝色条是任务,灰色条是组,第一行黑色的是所有项目的进度。问题是,当我想画一条在一行中以星号结束并在另一行结束的线时,我只能为第一行画线,即我的绘图区域。

标签: c# winforms datagridview .net-3.5


【解决方案1】:

试试RowPostPaint事件,例如:

e.Graphics.FillRectangle(Brushes.Red, 20, e.RowBounds.Top + 6, 
                         e.RowBounds.Width, CInt(e.RowBounds.Height / 2));

【讨论】:

  • 阿门。问题在于 RowBounds 仅用于一行。
  • @Nane,你没明白,它是为每一行渲染的,所以如果你想为特定的行绘制,那么你调用 if(e.RowIndex == something)e.Graphics.. .otherwise 无条件喜欢我的代码
【解决方案2】:

老实说,这看起来很棘手。请考虑为此使用CellPaining。但我认为实现你需要的东西可能会很痛苦。

【讨论】:

  • 我正在重写 OnCellPaint 以绘制条形图。即使它看起来有很多细胞,它也只是一个。问题是,当我想画一条在一行中以星号结束并在另一行结束的线时,我只能为第一行画线,即我的绘图区域。
  • 是什么阻止了在下一行找到单元格的位置并在那里绘制?
  • 嗯。可能我可以在 DataGridView 的 Graphics 对象上而不是单元格上绘图。我今晚会试试,让你知道。谢谢安德烈
  • 我想你可以。至少我记得我几年前做过,没有任何问题。我只是担心这是否会损害您的应用性能(取决于您需要绘制多少)。
猜你喜欢
  • 1970-01-01
  • 2016-02-13
  • 2018-10-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
相关资源
最近更新 更多