2011-01-11 71 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

相关问题