2017-02-07 8 views
0

bool 값 (확인란이 포함 된 열)으로 DataGridView를 필터링하려고합니다.DataGridView by boolean

나는 몇 가지 솔루션을 고개 아무도 나를 위해 일하지 않는다.

이 사람은 일반 간단하고 논리를 보이지만, 그것은 단지 모든 항목을 삭제합니다.

  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의 각 개체와 더 밀접하게 연관되도록 전환하는 것이 좋습니다. 그런 다음 BindingSource (Filter 속성이 있음)에 DataTable을 넣은 다음 해당 바인딩을 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이 당신을 도울 수있는 나의 대답 이었습니까? –