为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
守着一只汪 2022-07-23 16:20:27
在验证 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"); }       
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

无论数据绑定项类型和显示成员属性如何,以下代码都将起作用:

var isValid = cmbo.Items.Cast<Object>().Any(x=>cmbo.GetItemText(x) == ddPerson.Text);


查看完整回答
反对 回复 2022-07-23
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

尝试这个:

if (cmbo.Items.OfType<DataRowView>().Any(x => x["Person"]?.ToString() == ddPerson.Text))



查看完整回答
反对 回复 2022-07-23
  • 2 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信