通过Unbound Column过滤绑定的DataGridView

时间:2015-11-06 11:33:36

标签: c# datagridview datatable filtering databound

我有一个DataGridView从DataSet.xsd绑定到DataTable。我通过代码向_RowString添加了一个名为DataGridView的列。它包含一个字符串,该字符串由DataTable的其他列中包含的所有字符串值组成,我想使用该列过滤DataGridView

我的第一种方法是基于将_RowString列直接添加到DataTable而不是DataGridView。但是当我需要插入或更新记录时,这会导致一些问题,因为在DataTable 上添加和计算列会导致 RowState 值的所有< / strong> DataTable Changed 因此 TableAdapterManager.UpdateAll(DataSet) 方法始终更新所有记录!< /强>

我知道我可以使用BindingSource过滤DataGridView,就像之前一样:

BindingSource.Filter = String.Format("[_RowString] LIKE '%{0}%'", FilterTextBox.Text);

但由于上述原因,我不想将_RowsString列添加到我的DataTable对象中。

如何使用DataGridView未绑定列过滤_RowString而不使用BindingSource和/或将_RowString列添加到DataTable对象?

否则,有没有办法在没有更改DataTable值的情况下向RowState 添加列?

1 个答案:

答案 0 :(得分:1)

最简单的方法可能是在选择包含虚拟过滤列。

如果您向SQL添加“计算列”,则使用Concat将所有必要的列按正确的顺序放入一个附加列中,您将在结果集中正确显示。

示例:

select *, concat(last_name, ',', first_name) as filterColumn from persons;

作为计算列,它不可更新,如果需要更新表,则必须注意创建正确的Update语句。

您可以将DataGridView列隐藏起来,甚至可以将其删除..