gpt4 book ai didi

c# - DataGridView 过滤器隐藏编辑的项目

转载 作者:太空宇宙 更新时间:2023-11-03 13:22:06 25 4
gpt4 key购买 nike

我有一个绑定(bind)到 DataTable 的 DataGridView。然后使用以下代码在 2 列上过滤,但是当您编辑过滤列中的任何一个单元格然后单击另一行(或表单中的任何其他位置)时,编辑的行会​​因为过滤器而消失。

string rowFilter = string.Format("[{0}] = '{1}'", "Assigned To", comboBoxDepartment.Text);
rowFilter += string.Format(" AND [{0}] = '{1}'", "Status", comboBoxCaseStatus.Text);
(dataGridViewCases.DataSource as DataTable).DefaultView.RowFilter = rowFilter;

在编辑其中一个筛选字段时,如何阻止这种情况发生?

最佳答案

(我假设您有一个唯一的 ID 列)

您必须在任何方法之外声明您的过滤器。

string filter;

也声明这些:

int id;        
string nameOfcolumn;
string newValue;

像最初那样应用过滤器,但现在过滤器是在方法之外声明的。

在单元格 DataGridView_CellParsing 事件方法中,您在编辑后获取单元格的值,但在应用过滤器之前获取它,在此事件方法中,您必须保存正在修改的行的 ID:

private void DataGridView_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
//Get the id, (assuming that the id is in the first column)
id =int.Parse(DataGridView.Rows[e.RowIndex].Cells[0].Value.ToString());

//If you need more comparison, you can get the name of the column and the new value of the cell too
nameOfcolumn = DataGridView.Columns[e.ColumnIndex].Name;
newValue = e.Value.ToString();
}

现在您将在 DataGridView_CellEndEdit 事件方法上修改您的过滤器并重新应用它。

private void DataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
filter += " OR id=" + id.ToString(); //The modified value is now being included on the filter



//If you need more comparisons or if you can't use an id, you can use columnName and newValue

//filter += " OR (" + columnName + " LIKE '" + newValue+ "' AND id=" + id.ToString() + ")";


//Re-apply it
(DataGridView.DataSource as DataTable).DefaultView.RowFilter=filter;
}

我从这个 post 中得到了这个想法,但有人提示第一个答案“还显示了对该列具有相似值的所有其他行”,但如果使用 ID,则可以解决此问题。

关于c# - DataGridView 过滤器隐藏编辑的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23780820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com