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」選項,您將需要使用自定義代碼。
在CodeProject上的一篇文章,Umesh製作掛(CheckBox Header Column for DataGridView)看起來很容易實現 - 他們創建一個自定義DataGridViewHeaderCell
重寫Paint
和OnMouseClick
方法。
謝謝!這有很大幫助!我曾經在某處看到將列表直接作爲DataSource添加到GridView,我試過並失敗了,因爲缺少添加get; set;的重要部分。屬性給班級成員!再次感謝。 – 2012-07-26 18:19:51