我有2个带有BindingLists的listBox,作为它们的数据源。我们的想法是创建一个List构建器(以MSDN命名),其中第一个listBox显示当前添加的列,第二个listBox显示其余可用列。第一个列表包含ViewColumn
个对象,而另一个列表包含string
个。
我从数据库中将所选列加载到第一个listBox中,然后我想将剩余的可用列加载到第二个listBox中(列表本身来自数据库中的另一个位置)。考虑到列数没有限制,我想以最快的方式做到这一点 - 那会是什么?
以下是一些可视化的代码:
ViewTable _view;
BindingList<ViewColumn> _viewColumns = new BindingList<ViewColumn>();
BindingList<string> _detailsColumns = new BindingList<string>();
void CustomInitialize()
{
_view = //get view and its columns
_viewColumns = new BindingList<ViewColumn>(_view.Columns);
listBox_CurrentColumns.DataSource = _viewColumns;
listBox_CurrentColumns.DisplayMember = "Name";
var detailsTable = //get the list of available columns
foreach (var row in detailsTable)
{
//TODO: if _viewColumns does not contain this value, add it to _detailsColumns
_detailsColumns.Add(row.ColumnName);
}
listBox_AvailableColumns.DataSource = _detailsColumns;
}
答案 0 :(得分:1)
我想你想做点什么:
_detailsColumns = _allColumns.Except(_viewColumns.Select(c => c.Name))
这应该可以获取_allColumns
集合中的所有条目,但不包括_viewColumns
集合中的条目。
我假设_allColumns
包含可能列的整体集合。