DataGridView 控件具有自动生成可由 AutoGenerateColumns 属性设置的列的功能。此属性默认为 true - 即默认情况下自动生成列。
但是,只会为您绑定到网格的对象的公共属性自动生成列 - 字段不会显示。
当绑定对象上有公共布尔属性时,自动生成也适用于复选框列。
因此,实现前两个要求的最简单方法是将您的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
方法。