2011-01-11 38 views
0

我寫一個函數來過濾DataGridView中(DGV)如何在datadrid視圖中使用cellValueChanged事件來使用過濾器函數?

void filterDataGridView(DataGridView dgv, string columnName, string filterValue) 
{ 
    foreach (DataGridViewRow row in dgv.Rows) 
    { 
     if (row.Cells[columnName].Value.ToString().Contains(filterValue)) 
     { 
      row.Visible = true; 
     } 
     else row.Visible = false; 
    } 
} 

我有2 DGV與同列!
。其中之一是在第二代dgv搜索。
我爲dgv1編寫這個函數。
第一個dgv在每一列中有一行寫入字符串 secend dgv包含用於搜索的數據。

請幫助我如何使用冷杉dgv? - >(在每個單元格的dgv1我寫一個字符串,在dgv2它是過濾器)我該怎麼做?我怎麼可以設置屬性OG dgv1,什麼事件將是有益的,我如何使用它

謝謝:)

回答

1

如果你爲什麼不使用BindingSource.Filter屬性,而不是實現你的DataGridViews綁定到BindingSource的你自己的過濾?

+0

我不綁定DGV到綁定源我填dgv myself.how我可以設置dgv屬性只有一行和用戶可以在單元格上寫入? – sss 2011-01-11 08:48:02

1

如果我正確地理解你,你想使用你的第一個DataGridView(與第二行相同但只有一行)插入過濾器字符串。

那麼,什麼是錯這樣的代碼(只是一個例子):

this.dataGridView1.ReadOnly = false; 
this.dataGridView1.AllowUserToAddRows = false; 
this.dataGridView1.AllowUserToDeleteRows = false; 

var colA = this.dataGridView1.Columns.Add("Col A", "Column A"); 
var colB = this.dataGridView1.Columns.Add("Col B", "Column B"); 

var rowIdx = this.dataGridView1.Rows.Add("Hello", "World"); 
this.dataGridView1.Rows[rowIdx].ReadOnly = false; 


this.dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged); 

處理CellValueChanged事件來觸發您的過濾器:

void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    var editedCell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
    var newValue = editedCell.Value; 

    // apply filter here... 
} 
+0

我知道如何添加列,但我不能在運行時輸入任何東西在dgv中;我把dwv只讀屬性設爲false,但是我不能在dgv1上運行時寫入任何東西:( – sss 2011-01-11 09:44:31

相關問題