0

我已經看了很多地方,我正在努力做到這一點很簡單的事情。我有一個Windows窗體,我必須以這種形式顯示簡單的DataGridView:用對象列表和複選框列(C#)創建一個簡單的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 ,使不同對象的成員名單是綁定任何有效的方法到 不同的列,併爲每個有複選框?
  • 我看到了將複選框列添加到數據網格的示例,但沒有一個顯示如何將 添加到「標題」行,以便它可以表現爲「全選」/「取消全選」框。

如何實現這一點的任何幫助將是偉大的!我寫在C#中的簡單應用,但從來沒有與數據網格等:(上班

謝謝!

回答

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」選項,您將需要使用自定義代碼。

在CodeProject上的一篇文章,Umesh製作掛(CheckBox Header Column for DataGridView)看起來很容易實現 - 他們創建一個自定義DataGridViewHeaderCell重寫PaintOnMouseClick方法。

+0

謝謝!這有很大幫助!我曾經在某處看到將列表直接作爲DataSource添加到GridView,我試過並失敗了,因爲缺少添加get; set;的重要部分。屬性給班級成員!再次感謝。 – 2012-07-26 18:19:51

相關問題