我有一个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;
答案 0 :(得分:1)
您可以使用List.IndexOf
和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));