BindingSource.Find 没有列名
BindingSource.Find with no column name
我有一个 BindingSource 作为 ComboBox 的数据源。 BindingSource 的源数据是一个 List<String>
,显然没有列名,只有一个字符串列表。 BindingSource.Find 方法需要一个列名来搜索,所以我不能简单地使用这个函数。我需要将 ComboBox 设置为特定的选定项目,并且由于源数据是 BindingSource,我认为最好使用 BindingSource 来实现我的目标。
如何通过查找特定字符串值在 BindingSource 中设置正确的项目?
代码示例:
readonly List<String> _metaList = new List<String>();
...
while (reader.Read())
{
_metaList.Add(reader.GetString(0));
}
comboBoxPartities.DataSource = new BindingSource(_metaList, null);
comboBoxPartities.DisplayMember = "Key";
稍后,我需要实现这样的目标:
var bs = (BindingSource) comboBoxPartities.DataSource;
var i = bs.Find("?!!", lastProcessedTable);
((BindingSource) comboBoxPartities.DataSource).Position = i;
你可以使用 List.IndexOf
and BindingSource.Position
:
List<string> metaList = (List<string>) bs.DataSource;
int position = metaList.IndexOf("foo");
bs.Position = position;
如果在列表中找不到该字符串,第一项将是当前项。
您可以使用的另一种方法是 List.FindIndex
,它允许搜索不区分大小写:
int position = metaList.FindIndex(s => string.Equals(s, "Foo", StringComparison.CurrentCultureIgnoreCase));
我有一个 BindingSource 作为 ComboBox 的数据源。 BindingSource 的源数据是一个 List<String>
,显然没有列名,只有一个字符串列表。 BindingSource.Find 方法需要一个列名来搜索,所以我不能简单地使用这个函数。我需要将 ComboBox 设置为特定的选定项目,并且由于源数据是 BindingSource,我认为最好使用 BindingSource 来实现我的目标。
如何通过查找特定字符串值在 BindingSource 中设置正确的项目?
代码示例:
readonly List<String> _metaList = new List<String>();
...
while (reader.Read())
{
_metaList.Add(reader.GetString(0));
}
comboBoxPartities.DataSource = new BindingSource(_metaList, null);
comboBoxPartities.DisplayMember = "Key";
稍后,我需要实现这样的目标:
var bs = (BindingSource) comboBoxPartities.DataSource;
var i = bs.Find("?!!", lastProcessedTable);
((BindingSource) comboBoxPartities.DataSource).Position = i;
你可以使用 List.IndexOf
and BindingSource.Position
:
List<string> metaList = (List<string>) bs.DataSource;
int position = metaList.IndexOf("foo");
bs.Position = position;
如果在列表中找不到该字符串,第一项将是当前项。
您可以使用的另一种方法是 List.FindIndex
,它允许搜索不区分大小写:
int position = metaList.FindIndex(s => string.Equals(s, "Foo", StringComparison.CurrentCultureIgnoreCase));