2016-04-25 60 views
1

私は、DataGridViewTextBoxCellとDataGridViewCheckBoxCellを継承したさまざまなセルタイプのカスタムDataGridViewを持っています。DataGridViewTextBoxCellのホストチェックボックス

これらの各カスタムセルには、CellColourと呼ばれる背景色(グリッドの一部の機能に必要)を設定するプロパティがあります。

簡単にするために、我々は、カスタムセルのうちの2つを取るよ:

public class FormGridTextBoxCell : DataGridViewTextBoxCell 
{ 
    public Color CellColour { get; set; } 
    ... 
} 

public class FormGridCheckBoxCell : DataGridViewCheckBoxCell 
{ 
    public Color CellColour { get; set; } 
    ... 
} 

問題:

これは、すべての時間が、私は両方の列が含まれているグリッドの行のためのCellColourプロパティを設定することを意味し私は次のことを行う必要があり(それぞれ、前述のカスタム細胞型のCellTemplaesを持っている)FormGridTextBoxColumnとFormGridCheckBoxColumnを入力します。

if(CellToChange is FormGridTextBoxCell) 
{ 
    ((FormGridTextBoxCell)CellToChange).CellColour = Color.Red; 
} 
else if (CellToChange is FormGridCheckBoxCell) 
{ 
    ((FormGridCheckBoxCell)CellToChange).CellColour = Color.Red; 
} 

3種類以上の細胞型がある場合、これは困難になってきており、これを行うより良い方法があると確信しています。求め

SOLUTION:

私は私の頭の中でそれを持って、私はDataGridViewTextBoxCellから継承単一のクラスを作成し、順番にカスタムセルタイプを持つことができる場合、このクラスから継承していること:

public class FormGridCell : DataGridViewTextBoxCell 
{ 
    public Color CellColour { get; set } 
} 

public class FormGridTextBoxCell : FormGridCell 
{ 
    ... 
} 

public class FormGridCheckBoxCell : FormGridCell 
{ 
    ... 
} 

私は、唯一の次の操作を実行する必要があります。

if(CellToChange is FormGridCell) 
{ 
    ((FormGridCell)CellToChange).CellColour = Color.Red; 
    ... 
} 

(彼らはすべてのFormGridCellから継承されますよう)に関係なく、どのように多くのカスタム細胞タイプのがあります。特定のコントロール駆動型セルでは、Windowsフォームコントロールが実装されます。

しかしこれはDataGridViewTextBoxCellのCheckBoxをホスティングしているカスタムのDateTimeピッカーのために働くHost Controls in Windows Forms DataGridView Cells

は、魚の異なるやかんです:私はこの記事で、次の試してみました

:これが問題になる理由

セルの値を制御するためのさまざまなプロパティがあるためです。

DataGridViewTextBoxCellで開始し、継承したクラスのデータ型を事前定義済みのデータ型に変更する方が簡単な場合は、私は提案に公開しますが、コアの問題では、 DataGridViewTextBoxCell。

答えて

1

あなたが見つけたと確信しているように、1つのクラスは1つの基本クラスから継承することができます。

public class FormGridTextBoxCell : DataGridViewTextBoxCell, FormGridCell 
{ 
    public Color CellColor { get; set; } 
} 

public class FormGridCheckBoxCell : DataGridViewCheckBoxCell, FormGridCell 
{ 
    public Color CellColor { get; set; } 
} 
:あなたは interfaceを実施し、それぞれの DataGridViewCell種類 などから継承し、全く同様にあなたのサブクラスを作成することができ、そこから

public interface FormGridCell 
{ 
    Color CellColor { get; set; } 
} 

:何が欠けていることなど、interfaceです

この時点で、使い方はあなたが望むほど簡単です。 CellTemplate経由、およびinterfaceタイプに必要なだけのキャスト細胞などの細胞を作成し、あなたが望んでいたとして、あなたがやるのは自由です(視覚的な結果を見て、私は一例として、セルのBackColorを設定):

if (cell is FormGridCell) 
{ 
    (cell as FormGridCell).CellColor = Color.Green; 
    cell.Style.BackColor = Color.Green; 
} 
else 
{ 
    cell.Style.BackColor = Color.Red; 
} 
+0

それはまさに私が後にしたものです。どうもありがとう!そして、はい、この問題の根本原因は、基本的に単一の基本クラスから継承できることだけでした。 –

関連する問題