我看了很多地方,我正在努力做这个据说简单的事情。我有一个Windows窗体,我将以这种形式显示一个简单的DataGridView:
| (CheckBoxColumn)| FilePath | FileState |
现在,有一些问题。我需要绑定到它们的数据在这样的对象列表中:
class FileObject
{
string filePath;
string fileState;
}
//Now here's the list of these objects which I populate somehow.
List<FileObject> listFiles;
如何实现这一目标的任何帮助都会很棒!我在C#中编写简单的应用程序,但从未使用过datagrids等:(
谢谢!
答案 0 :(得分:1)
请参考以下示例,准确显示您要查找的内容
http://www.codeproject.com/Articles/20165/CheckBox-Header-Column-For-DataGridView
答案 1 :(得分:1)
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链接到(CheckBox Header Column for DataGridView)的CodeProject上的文章看起来很容易实现 - 它们创建了一个自定义DataGridViewHeaderCell
来覆盖Paint
和OnMouseClick
方法。