我有一个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
添加列?
答案 0 :(得分:1)
最简单的方法可能是在选择中包含虚拟过滤列。
如果您向SQL
添加“计算列”,则使用Concat
将所有必要的列按正确的顺序放入一个附加列中,您将在结果集中正确显示。
示例:
select *, concat(last_name, ',', first_name) as filterColumn from persons;
作为计算列,它不可更新,如果需要更新表,则必须注意创建正确的Update
语句。
您可以将DataGridView
列隐藏起来,甚至可以将其删除..