如何在不使用对象的情况下检查 DataGridViewComboBoxColumn 中的项目?

Posted

技术标签:

【中文标题】如何在不使用对象的情况下检查 DataGridViewComboBoxColumn 中的项目?【英文标题】:How can I check for an item in a DataGridViewComboBoxColumn without using an object? 【发布时间】:2015-09-10 14:49:16 【问题描述】:

我需要检查DataGridViewComboBoxColumn 中是否存在某个值。问题是DataGridViewComboBoxColumn.Items.Contains() 想要一个对象,我给它一个long 值。有没有一种方法/方式可以获得项目的字符串/长值?

这就是我现在的逻辑(伪代码)。

if (DataGridViewComboBoxColumn.Items.Contains(long))

     //Do Stuff

【问题讨论】:

【参考方案1】:

有很多方法可以做到这一点,这种简单而漂亮的方法会为您解决问题:

字符串:

yourDataGridViewComboBoxColumn.Items.Cast<string>().Contains("your string value")

长:

yourDataGridViewComboBoxColumn.Items.Cast<long>().Contains(yourLongValue)

复杂对象:

如果您的组合框列中的Items 很复杂,您应该这样做:

 yourDataGridViewComboBoxColumn.Items.Cast<YourComplexType>()
    .Select(x => x.YourValueMemberField)
    .Contains(yourLongValue);

例如,如果项目的类型为Category,类别有IdName,并且您将其Id 用作ValueMember,则可以使用如下代码:

 int value=10;
 yourDataGridViewComboBoxColumn.Items.Cast<Category>()
    .Select(x => x.Id)
    .Contains(value);

这里的重点是使用Cast&lt;T&gt;,它可以帮助您将所有项目转换为所需的类型。

这样您甚至可以在 Cast&lt;T&gt;() 之后使用 Where() 搜索项目

【讨论】:

我尝试了“Long”版本,但得到了“InvalidCastException”。 这是因为可能所有项目都不长 里面的物品是什么类型的? 我有一个 List 我在 Contains() 部分运行 @Hooplehead24 使用Cast&lt;DataRowView&gt;Select(x=&gt;(long)x["YourValueMemberColumn"])【参考方案2】:
    DataGridViewComboBoxCell cell = dataGridView1.Rows[0].Cells[0] as DataGridViewComboBoxCell;
    long value = 3434232;
    if (cell.Items.Contains(value)) MessageBox.Show("Yes");

【讨论】:

发布代码很有用,但出于教育目的,最好还包括一些关于它如何解决问题的说明。

以上是关于如何在不使用对象的情况下检查 DataGridViewComboBoxColumn 中的项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不创建 ViewModel 对象的情况下指定 DataContext (ViewModel) 类型以在 XAML 编辑器中进行设计时绑定检查? [复制]

如何在不手动检查的情况下确定网站是不是使用 webassembly?

如何在不使用 SafeArea 的情况下检查设备是不是有缺口?

如何在不下载的情况下使用其 URL 检查文件是不是存在?

如何在不使用额外空间的情况下检查双向链表是不是为回文?

如何在不使用 sqrt 的情况下检查整数是不是是完美的正方形 [重复]