我试图在两个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;
}
}
答案 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()
,只需说明您将收到异常。您可能希望从那里删除该语句。
我不知道你的逻辑到底是什么,但你可以按照上面提到的事情来尝试。
希望这有帮助。