限制datagridview中的重复行

限制datagridview中的重复行,datagridview,duplicates,Datagridview,Duplicates,我有Datagridview,第一列是combobox。如何限制用户仅从列表中选择一项。因此,如果在第一行中用户已经选择了“香蕉”,那么在第二行中不应该允许香蕉(可能会显示一个消息框,上面写着“香蕉已经存在”) 谢谢。下面是一个使用CellValidating事件的简单解决方案: void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { if (e.ColumnInd

我有Datagridview,第一列是combobox。如何限制用户仅从列表中选择一项。因此,如果在第一行中用户已经选择了“香蕉”,那么在第二行中不应该允许香蕉(可能会显示一个消息框,上面写着“香蕉已经存在”)


谢谢。

下面是一个使用
CellValidating
事件的简单解决方案:

void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    if (e.ColumnIndex == dataGridView1.Columns["MyCombo"].Index)
    {
        var query = from DataGridViewRow row in dataGridView1.Rows
                    where row.Cells[e.ColumnIndex].Value != null && row.Cells[e.ColumnIndex].Value.ToString() == e.FormattedValue.ToString()
                    where row.Index != e.RowIndex
                    select row;

        if (query.Any())
        {
            MessageBox.Show(string.Format("{0} already exists", e.FormattedValue.ToString()));
            e.Cancel = true;
        }
    }
}

当用户试图离开包含组合框的单元格时,会触发此事件-另一个选项是,当用户使用
行验证
事件离开当前行时,会执行类似操作。

我将在今天晚些时候发布答案,除非有其他人想知道您是否考虑从下拉列表中删除所选项目这是可能的,也不太复杂。对于您当前想要的,您需要使用CellValidation事件。我个人认为,从可用性角度来看,更好的方法是过滤可用选项,以确保已经选择的值不可用。