使用对象列表和复选框列(C#)创建一个简单的DataGridView

时间:2012-07-26 05:44:02

标签: c# winforms datagridview datagridviewcolumn datagridviewcheckboxcell

我看了很多地方,我正在努力做这个据说简单的事情。我有一个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;
  • 有没有有效的方法将它直接绑定到DataGridView 以便列表中的Object的不同成员绑定到 不同的列,每个都有复选框?
  • 我看到了将复选框列添加到数据网格的示例,但没有一个显示如何 将它添加到“标题”行,以便它可以表现为“全部检查”/“取消选中所有”框。

如何实现这一目标的任何帮助都会很棒!我在C#中编写简单的应用程序,但从未使用过datagrids等:(

谢谢!

2 个答案:

答案 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来覆盖PaintOnMouseClick方法。