0

私は多くの場所を見てきましたが、このおそらく単純なことを行うのに苦労しています。このフォームで単純な DataGridView を表示する Windows フォームがあります。

| | (CheckBoxColumn) | ファイルパス | ファイル状態 |

さて、いくつかの問題があります。それらにバインドする必要があるデータは、次のようなオブジェクトのリストにあります。

    class FileObject
    {
        string filePath;
        string fileState;
    }

    //Now here's the list of these objects which I populate somehow. 
    List<FileObject> listFiles;
  • リスト内の Object のさまざまなメンバーがさまざまな列にバインドされ、それぞれにチェックボックスがあるように、これを DataGridView に直接バインドする効率的な方法はありますか?
  • チェックボックス列をデータグリッドに追加する例を見ましたが、「すべてチェック」/「すべてチェック解除」ボックスとして動作できるように、「ヘッダー」行にも追加する方法を示していませんでした。

これを達成する方法についての助けは素晴らしいでしょう! 私は C# で単純なアプリケーションを作成しますが、データグリッドなどを扱う必要はありませんでした:(

ありがとう!

4

2 に答える 2

1

DataGridView コントロールには、AutoGenerateColumns プロパティで設定できる列を自動的に生成する機能があります。このプロパティのデフォルトは true です。つまり、列はデフォルトで自動生成されます。

ただし、列は、グリッドにバインドするオブジェクトのパブリック プロパティに対してのみ自動的に生成されます。フィールドは表示されません。

自動生成は、バインドされたオブジェクトにパブリック ブール プロパティがある場合、チェック ボックス列に対しても機能します。

したがって、最初の 2 つの要件を達成する最も簡単な方法は、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 に答える
1

以下の例を参照してください。探しているものを正確に示しています

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

于 2012-07-26T05:55:45.543 に答える