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

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

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

if (DataGridViewComboBoxColumn.Items.Contains(long))
{
     //Do Stuff
}

【问题讨论】:

    标签: c# winforms datagridview datagridviewcombobox


    【解决方案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");
    

    【讨论】:

    • 发布代码很有用,但出于教育目的,最好还包括一些关于它如何解决问题的说明。
    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多