2012-03-25 14 views
2

DataGridViewの行を通して線を描こうとしています。アイデアはガントチャートを完成させることです。今は棒グラフを描くことができます。しかし、タスクの前に別のタスクがある場合は、それらを結ぶ線を描く必要があります。行を介してDataGridViewの線を描く

私は今の私場所です:私は必要なものenter image description here

は、コネクタを描画するためには、例えば、 "Tarea 6" と "Tarea 7" 楕円に

enter image description here

+0

ガント青/赤のバーを描画するために管理しましたか?あなたは同じ方法を使用してコネクタを描かないのはなぜですか? – digEmAll

+0

@digEmAll。すべてのバーは、OnCellPaintをオーバーライドして一意のセルに描画されます。赤はタスクが遅れていることを意味し、黒は時間通りにあることを意味します。青色のバーはタスクで、グレーのグループはグループで、最初の行の黒いバーはすべてのプロジェクトの進捗状況です。問題は、ある行に星があり、別の行で終わる行を描きたい場合は、最初の行の行だけを描くことができます。これが私の描画領域です。 – Nane

答えて

0

正直なところ、それは難しいようです。これにはCellPainingを使用してください。しかし、私はそれがあなたが必要なものを実装するのは苦痛かもしれないと仮定します。

+0

私はバーを既に描画するためにOnCellPaintをオーバーライドしています。たとえそれが細胞のように見えるとしても、それは唯一のものです。問題は、ある行に星があり、別の行で終わる行を描きたい場合は、最初の行の行だけを描くことができます。これが私の描画領域です。 – Nane

+0

次の行のセルの位置を見つけてそこに描画するのを防ぐには? –

+0

Mmmmm。おそらく、セルの代わりにDataGridViewのGraphicsオブジェクトを描画することができます。私は今夜​​お試しになります。ありがとうAndriy – Nane

1

には、例えば、RowPostPaintイベントをお試しください:

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

Amen。問題は、RowBoundsがただ1つの行だけであることです。 – Nane

+1

@ネーン、あなたはそれを取得していない、それは各行のためにレンダリングされるので、特定の行を描画する場合if(e.RowIndex == something)e.Graphics ...そうでなければ、条件 –