DataGridView コントロールには、AutoGenerateColumns プロパティで設定できる列を自動的に生成する機能があります。このプロパティのデフォルトは true です。つまり、列はデフォルトで自動生成されます。
ただし、列は、グリッドにバインドするオブジェクトのパブリック プロパティに対してのみ自動的に生成されます。フィールドは表示されません。
自動生成は、バインドされたオブジェクトにパブリック ブール プロパティがある場合、チェック ボックス列に対しても機能します。
したがって、最初の 2 つの要件を達成する最も簡単な方法は、FileObject
クラスを次のように変更することです。
public class FileObject
{
public string FilePath { get; set; }
public string FileState { get; set; }
public bool Selected { get; set; }
}
そのクラスを変更できない場合は、ファイル オブジェクトを保持するラッパー オブジェクトを作成することをお勧めします。
public class FileObjectWrapper
{
private FileObject fileObject_;
FileObjectWrapper()
{
fileObject_ = new FileObject();
}
FileObjectWrapper(FileObject fo)
{
fileObject_ = fo;
}
public string FilePath
{
get { return fileObject_.filePath; }
set { fileObject_.filePath = value; }
}
public string FileState
{
get { return fileObject_.fileState; }
set { fileObject_.fileState= value; }
}
public bool Selected { get; set; }
}
次に、バインド先のリストを作成できます (通常は BindingList が最適です)。次のようにします。
var fowList = new BindingList<FileObjectWrapper>();
foreach (FileObject fo in // here you have your list of file objects! )
{
fowList.Add(new FileObjectWrapper(fo));
}
dataGridView1.DataSource = fowList;
上記を行うには多くの方法がありますが、それは一般的な考え方です。
バインドDataGridViewCheckBoxColumn
されていないリストをグリッドに追加することもできますが、バインドされたリストに含める方が簡単だと思います。必要な場合の方法は次のとおりです。
DataGridViewCheckBoxColumn c = new DataGridViewCheckBoxColumn();
c.Name = "Selected";
dataGridView1.Columns.Add(c);
最後に、ヘッダーに「SelectedAll」オプションを含めるには、カスタム コードを使用する必要があります。
Umesh がリンクした CodeProject に関する記事 ( DataGridView の CheckBox Header Column ) は、実装が非常に簡単に見えます。メソッドとメソッドDataGridViewHeaderCell
をオーバーライドするカスタムを作成します。Paint
OnMouseClick