如何在不使用对象的情况下检查 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
,类别有Id
和Name
,并且您将其Id
用作ValueMember
,则可以使用如下代码:
int value=10;
yourDataGridViewComboBoxColumn.Items.Cast<Category>()
.Select(x => x.Id)
.Contains(value);
这里的重点是使用Cast<T>
,它可以帮助您将所有项目转换为所需的类型。
这样您甚至可以在 Cast<T>()
之后使用 Where()
搜索项目
【讨论】:
我尝试了“Long”版本,但得到了“InvalidCastException”。 这是因为可能所有项目都不长 里面的物品是什么类型的? 我有一个 ListCast<DataRowView>
和Select(x=>(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?