標準のDataGridViewImageColumnを内部に持つカスタムのDataGridViewコンポーネントを作成しました。新しいプロパティは、特定のテーブルに必要がないときにカラムの可視性を変更します。コンストラクタに列を追加し、CellFormattingイベントでそれを更新します。それは意図したように働く部分です。カスタムDataGridView列をデザイナで使用するときに重複します
コントロールを新しいフォームにドロップすると、コントロールが新しいフォームに表示されます。プログラムを実行すると、グリッド内に2つのイメージ列が表示されます。
新しいフォーム
だけでコンポーネントを追加し、私はそれは私に2つの列を示し、何も変更せずに、それを起動するとDock.Fillを設定します。最初のものは正常に動作していて、2番目のものは欠けているx画像を常に表示しています(データがないのでxが両方表示されます)。
フォームのデザイナーには、自動的に追加されたイメージの列があります。
private CustomDataGridView customDataGridView1;
private System.Windows.Forms.DataGridViewImageColumn dataGridViewImageColumn1;
私がフォームで編集し続けると、VSが同じ列のさらに多くのコピーを作成することがあります。問題を解決するために、私はDGV.Columnsの一覧を今すぐ消去しなければなりません。
VSが自分のフィールドをコピーしないようにするにはどうすればよいですか?
次のコードは、問題を再現するための最小限の部分です。
public class CustomDataGridView : DataGridView
{
private DataGridViewImageColumn EditStatusIcons;
private bool hasIcons = true;
public bool HasIcons
{
get { return this.hasIcons; }
set
{
if (this.Columns["EditIcons"] == null) return;
this.Columns["EditIcons"].Visible = value;
this.hasIcons = value;
}
}
public CustomDataGridView()
{
this.EditStatusIcons = new System.Windows.Forms.DataGridViewImageColumn();
this.EditStatusIcons.HeaderText = "";
this.EditStatusIcons.Name = "EditStatusIcons";
this.Columns.Add(this.EditStatusIcons);
}
}
編集:は私もCustom DataGridView adds columns everytime I buildに似this.AutoGenerateColumns = false;
を使用しようとしたと述べました。何も変わりません。
フォームの列のリストを消去すると、作業列が削除され、間違った名前の完全な空の列である列dataGridViewImageColumn1が残ります。
あなたはDataGridViewののデザイナーに追加どのように多くの列がありますか? – DmO
なし私はフォーム上にコンポーネントをドロップし、DockスタイルをFillに設定しました。 VSは独自の列を追加しました。 – Booser
コントロールが正常に動作しています。コンストラクタで列を追加した後、デザイナは列をシリアル化します。次に、アプリケーションを実行し、コンストラクターに列を追加します。だからあなたは2つの列を持っています。これはこのように続き、2列に限定されません。ビルドして実行する必要はありませんが、グリッドを含むフォームを開いてフォームに小さな変更を加えて保存すれば十分です。新しいコラムが生まれました! –