数据绑定DataGridView到ComboBox抛出空值异常

时间:2015-04-21 05:07:51

标签: c# linq data-binding combobox null

我试图在两个ComboBox中绑定来自 DataGridView 的数据。在ComboBox中,一个是 cbosearchby 和其他 cbosearchvalue cbosearchby 工作正常,但是当抛出select searchvalue错误时。请帮我整理一下。

错误是:

Value cannot be null.Parameter name: value

这是我的代码:

    private void cboSearchBy_SelectedIndexChanged(object sender, EventArgs e)
    {
        cboSearchValue.Items.Clear();
        cboSearchValue.Text = "";

        if (cboSearchBy.SelectedIndex != -1)
        {
            var source = new AutoCompleteStringCollection();
            string[] sValues = new string[0];

            foreach (DataGridViewRow dr in dataGridView1.Rows)
            {
                if (!cboSearchValue.Items.Contains(dr.Cells[cboSearchBy.SelectedItem.ToString()].Value))
                {
                    cboSearchValue.Items.Add(dr.Cells[cboSearchBy.SelectedItem.ToString()].Value);
                    Array.Resize(ref sValues, sValues.Length + 1);
                    sValues[sValues.Length - 1] = Convert.ToString(dr.Cells[cboSearchBy.SelectedItem.ToString()].Value);
                }
            }

            source.AddRange(sValues);
            cboSearchValue.AutoCompleteCustomSource = source;
        }
    }

2 个答案:

答案 0 :(得分:1)

如果您传递给value的{​​{1}}为Contains(),那么它会抛出异常。

以下是您拨打Contains()方法时内部发生的事情:

null

要解决此问题,您需要单独检查 public bool Contains(object value) { return IndexOf(value) != -1; } public int IndexOf(object value) { if (value == null) throw new ArgumentNullException("value"); return InnerList.IndexOf(value); }

null

答案 1 :(得分:0)

这里的问题可能是这句话:

cboSearchValue.Items.Clear();

这会在您的功能的入口点立即调用,这将从您的下拉列表中删除所有项目。在您的代码中,您在同一下拉列表中使用Contains()。由于下拉列表已经为空,因此您无法使用Contains(),只需说明您将收到异常。您可能希望从那里删除该语句。

我不知道你的逻辑到底是什么,但你可以按照上面提到的事情来尝试。

希望这有帮助。