0

我看过很多地方,我正在努力做这件所谓的简单事情。我有一个 Windows 窗体,我必须在该窗体上以这种形式显示一个简单的 DataGridView:

| (复选框列) | 文件路径 | 文件状态 |

现在,有几个问题。我需要绑定到它们的数据位于对象列表中,如下所示:

    class FileObject
    {
        string filePath;
        string fileState;
    }

    //Now here's the list of these objects which I populate somehow. 
    List<FileObject> listFiles;
  • 是否有任何有效的方法可以将其直接绑定到 DataGridView,以便列表中 Object 的不同成员绑定到不同的列,并且每个都有复选框?
  • 我看到了将复选框列添加到数据网格的示例,但没有一个显示如何将其添加到“标题”行,以便它可以充当“选中所有”/“取消选中所有”框。

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

谢谢!

4

2 回答 2

1

请参考以下示例,准确显示您要查找的内容

http://www.codeproject.com/Articles/20165/CheckBox-Header-Column-For-DataGridView

于 2012-07-26T05:55:45.543 回答
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 链接到的 CodeProject 上的文章(DataGridView 的 CheckBox Header Column)看起来很容易实现 - 他们创建了一个自定义DataGridViewHeaderCell的覆盖PaintOnMouseClick方法。

于 2012-07-26T13:21:30.283 回答