如何检查文本值是否在包含 DataRowViews 的控件的 DataSource 中?

在验证 ComboBox 时,我试图检查 ComboBox 中的值是否在数据绑定到所述 ComboBox 的值列表中。

数据源是一个 BindingSource,而基础项的类型是 DataRowView。

所以我不知道如何将组合框的值与 DataSource 的 DataRowView 的“Person”字段进行比较


同样在有人建议将 DropDownStyle 设置为 DropDownList 之前,这不是这种情况的选择。


我试过的:


private void ddPerson_Validating(object sender, CancelEventArgs e)

    {

        ComboBox cmbo = sender as ComboBox;

        if (!string.IsNullOrWhiteSpace(ddPerson.Text))

        {

            if (cmbo.Items.Contains(ddPerson.Text))

            {

                errorProvider1.SetError(cmbo, "");

            }

            else

            {

                errorProvider1.SetError(cmbo, "\"" + person.Text + "\" is not in the list of accepted values");

            }

        }

        else

        {

            errorProvider1.SetError(cmbo, cmbo.DisplayMember + " is required");

        }

    }

我也试过


if (personBindingSource.Contains(ddPerson.Text))

我尝试的上述两种解决方案都不起作用,因为 personBindingSource 和 cmbo.Items 只是 DataRowView 对象的列表。


从这里https://stackoverflow.com/a/24126821/3490417 我试过

if (cmbo.Items.Cast<DataRowView>().Select(x => Convert.ToString(x["Person"]).Contains(ddPerson.Text))

这不会编译错误“无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'bool'


编辑:

我找到了另一种检查组合框的值是否在组合框的绑定源中的方法。虽然我最终使用了mm8 的解决方案,因为它更干净。


int found = personBindingSource.Find("Person", ddPerson.Text);

if (found < 0)

{ errorProvider1.SetError(cmbo, "\"" + person.Text + "\" 

  is not in the list of accepted values"); }       


守着一只汪
浏览 74回答 2
2回答

狐的传说

无论数据绑定项类型和显示成员属性如何,以下代码都将起作用:var&nbsp;isValid&nbsp;=&nbsp;cmbo.Items.Cast<Object>().Any(x=>cmbo.GetItemText(x)&nbsp;==&nbsp;ddPerson.Text);

叮当猫咪

尝试这个:if&nbsp;(cmbo.Items.OfType<DataRowView>().Any(x&nbsp;=>&nbsp;x["Person"]?.ToString()&nbsp;==&nbsp;ddPerson.Text))
打开App,查看更多内容
随时随地看视频慕课网APP