2011-07-19 12 views
2

データをグループに分割するためのセパレータとして機能するカスタムDataGridViewRowを作成しようとしています。テキスト、BackgroundColorをとForeColorプロパティは、私のSeparatorDataGridViewRowクラスのプロパティであるカスタムDataGridViewRowの問題

protected override void PaintCells(Graphics graphics, Rectangle clipBounds, Rectangle rowBounds, int rowIndex, DataGridViewElementStates rowState, bool isFirstDisplayedRow, bool isLastVisibleRow, DataGridViewPaintParts paintParts) 
    { 
     graphics.FillRectangle(new SolidBrush(BackgroundColor),rowBounds); 

     StringFormat format = new StringFormat {Alignment = StringAlignment.Center,LineAlignment = StringAlignment.Center}; 
     graphics.DrawString(Text, this.DataGridView.Font, new SolidBrush(ForeColor), rowBounds,format); 
    } 

:私はこのようなDataGridViewRowクラスのPainCellsメソッドをオーバーライドすることでそれをやりました。行は、私が望んでいたのとまったく同じように見えます。しかし、これは "カバー"にすぎません。その理由は、描かれた矩形の下にオリジナルのデータグリッドセルがあるからです。特に私が追加したDataGridViewButtonColumnフォームを削除するセルがあります。そしてそのために、ボタンが私のセパレータ行であるセルをクリックすると、行が削除されます。

私はあなたが私に正しい方向を示すことができるか、私がこのソリューションを使ってできることをユーザーの可能性をブロックすることができるかを伝えることができたらうれしいでしょう。この行のあるものは、「描かれた矩形の下に」何があっても。

カスタムコントロールを作成する経験はほとんどありません。そのため、どのメソッドをオーバーライドするのか、特定の目標を達成するために何を追加するのかはわかりません。 すべての助けを歓迎します:)

+0

DataGridViewに特定の行にセルを描画しないように指示する方法はありますか。または、与えられた行の型?私はそれに責任がある方法を見つけることができませんでした。 DataGridView onPaintメソッドは、パラメータとしてClipRectangleとGraphicsのみを提供するので、描画する行を決定することはできません。 – Brazol

答えて

0

私は問題を部分的に解決しました。私はこの解決策が良いのか分かりませんし、別の問題が私には謎です。

私のSeparatorDataGridViewRowでは、Tagを "Separator"に設定しました。私のセパレータ行がユーザーにより削除することはできません

protected override void OnUserDeletingRow(DataGridViewRowCancelEventArgs e) 
    { 
     if (e.Row.Tag != null && e.Row.Tag.ToString().Equals("Separator")) 
     { 
      e.Cancel = true; 
      return; 
     } 
     base.OnUserDeletingRow(e); 
    } 

この方法:それから私は、私はメソッドをオーバーライドしOnUserDeletingRowている私自身のDataGridViewコントロールを作成しました。しかし今、奇妙なことが起こります。私は名前を「2」との行を選択し、それを削除すると、すべてが正常に動作します

enter image description here

enter image description here

をそして、それはすべての行で動作します私はこのようなDataGridViewのを持っています。私はセパレータの行とプレスのいずれかを選択した場合、それは削除され得ることはありませんが、その後、私はそれより上の行のいずれかを削除した場合、この問題が発生した削除:この場合

enter image description here

を私は、セパレータ2は、その後、削除選択しました「2」という名前の行。実際の行が削除され、選択された行は実際にはSeparator2行なので、奇妙です。それはPaint問題のようなものです。しかし、私はセパレータの行を前に削除しようとするときにのみこれがなぜ起こるのかわかりません。上記のいずれかを削除する前にセパレータ行を削除しようとすると、どのような変更が行われますか?

関連する問題