BindingSource.Find没有列名

时间:2015-02-09 09:27:31

标签: c# .net

我有一个BindingSource作为ComboBox的DataSource。 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;

1 个答案:

答案 0 :(得分:1)

您可以使用List.IndexOfBindingSource.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));