2017-02-07 7 views
0

ブール値(チェックボックスを含む列)でDataGridViewをフィルタリングしようとしています。DataGridViewをブール値でフィルタリングする

私はいくつかの解決策を見つけ出してくれましたが、誰も私のために働いていませんでした。

これは単純で論理的ですが、すべてのエントリを消去するだけです。

  DataView dv = new DataView(); 
      dv.RowFilter = "Finished = 0"; 
      dgvMain.DataSource = dv; 

カラムのヘッダーテキストは「Finished」で、名前は「Finished」です。

私はここで間違っていますか?

+0

フィルタリングする前に既にデータソースを設定しようとしましたか? – Fruchtzwerg

+0

私はあなたが実際に何を意味するかはわかりません。 – Smarc

+0

コードの2行目と3行目を交換してみてください。 – Fruchtzwerg

答えて

0

DataSourceにDataTableを使用していない場合(あなたのコメントはListです)、DataGridViewの各オブジェクトにチェックボックスがより密接に関連するように切り替えることをお勧めします。次に、DataTableをBindingSource(Filterプロパティを持つ)に配置し、そのバインディングをDataGridViewのDataSourceとして使用して、DataTableをフィルタリングできます。

public partial class MainForm : Form { 

    public MainForm() { 
     InitializeComponent(); 
     DataTable dt = new DataTable(); 

     // change string to whatever your object type is 
     dt.Columns.Add(new DataColumn("object column", typeof(string))); 
     dt.Columns.Add(new DataColumn("CheckBoxColumn", typeof(bool))); 

     dt.Rows.Add("row1", 1); 
     dt.Rows.Add("row2", 0); 
     dt.Rows.Add("row3", 1); 
     dt.Rows.Add("row4", 1); 
     dt.Rows.Add("row5", 0); 

     BindingSource binding = new BindingSource(); 
     binding.DataSource = dt; 

     dataGridView1.DataSource = binding; 
    } 

    private void filterDGV(string rowFilter) 
    { 
     BindingSource source = (BindingSource)dataGridView1.DataSource; 
     source.Filter = rowFilter; 
    } 

    private void FilterToCheckedRows_Click(object sender, EventArgs e) 
    { 
     filterDGV("CheckBoxColumn = 1"); 
    } 

    private void FilterToUncheckedRows_Click(object sender, EventArgs e) 
    { 
     filterDGV("CheckBoxColumn = 0"); 
    } 
} 
+0

'' System.Data.DataView 'を入力するには' 'System.Collections.Generic.List'1 [Engine.Book]'タイプのオブジェクトをキャストできません。 " DataGridViewは実際にListにバインドされているためです。 – Smarc

+0

@Smarc私の更新された回答を確認してください –

+0

@Smarcはあなたを助けることができる私の答えでしたか? –

関連する問題