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));