c#combobox.SelectIndexChanged在将数据加载到数据库后出现异常

c#combobox.SelectIndexChanged在将数据加载到数据库后出现异常,c#,combobox,selectedindexchanged,C#,Combobox,Selectedindexchanged,在填充数据库后,我对事件SelectIndexchange有问题。组合框正在FORMLOAD事件中填充 QueryAssist queryAssist = new QueryAssist(); DataTable dataTable = new DataTable(); dataTable = queryAssist.runQuery(_query); Dictionary<int, string> comboSource = new Dictionary<int, stri

在填充数据库后,我对事件SelectIndexchange有问题。组合框正在FORMLOAD事件中填充

QueryAssist queryAssist = new QueryAssist();
DataTable dataTable = new DataTable();
dataTable = queryAssist.runQuery(_query);

Dictionary<int, string> comboSource = new Dictionary<int, string>();
comboSource.Add(-1, "Select");
foreach (DataRow dr in dataTable.Rows)
{
    comboSource.Add((int)dr.ItemArray[0], (string)dr.ItemArray[1]);
}
cmbDistaccamento.DataSource = new BindingSource(comboSource, null);
cmbDistaccamento.DisplayMember = "value";
cmbDistaccamento.ValueMember = "key";
消息框显示2

提出了一个例外。 我认为是因为'cmbDistaccamento'在获取字符串之前获取不同的值

我需要分配给组合框的“键”值,该组合框使用SelectIndexChanged进行选择

我尝试使用beginUpdate()和endUpdate()方法,但不起作用

如何解决这个问题


对不起,英语不好

毫无例外,很难说

顺便说一下,关注这一行,我发现可能会出现两个问题:

Int32.Parse(cmbDistaccamento.SelectedValue.ToString())
  • SelectedValue可以为null->NullException
  • 将SelectedValue.ToString()解析为Int时可能会失败
  • 现在的结果是:“打印迭代1”后formload和下一次我有可能选择的组合框。。 这就是问题所在。在formload上更改了第一次提升SelectEdItem。
    ... :(

    告诉我们引发了什么异常以及发生在哪一行。解决错误的第一步是读取错误消息。异常消息:格式字符串不正确。确定异常……。但问题是在事件SelectedIndexChanged之后读取值。我需要“键”分配给使用SelectIndexChanged进行选择的组合框的值。但是SelectIndexChanged会使用from load运行twince!我还没有测试,但是您应该在设置DisplayMember和ValueMember之后设置数据源。
    Int32.Parse(cmbDistaccamento.SelectedValue.ToString())
    
    private void frmInserisciCollaboratore_Load(object sender, EventArgs e)
            {
                //cmbDistaccamento.BeginUpdate();
                QueryAssist queryAssist = new QueryAssist();
                DataTable dataTable = new DataTable();
                dataTable = queryAssist.runQuery("SELECT DISTACCAMENTO.ID_Distaccamento, DISTACCAMENTO.Indirizzo FROM DISTACCAMENTO");
    
                Dictionary<int, string> comboSource = new Dictionary<int, string>();
                comboSource.Add(-1, "Select");
                foreach (DataRow dr in dataTable.Rows)
                {
                    comboSource.Add((int)dr.ItemArray[0], (string)dr.ItemArray[1]);
                }
                cmbDistaccamento.DisplayMember = "value";
                cmbDistaccamento.ValueMember = "key";
                cmbDistaccamento.DataSource = new BindingSource(comboSource, null);
                //cmbDistaccamento.EndUpdate();
            }
    
    private int i = 0;
            private void cmbDistaccamento_SelectedIndexChanged(object sender, EventArgs e)
            {
    
                try
                {
                    i += 1;
                    MessageBox.Show("print iteration i : " +i.ToString());
    
                    _cmbDistaccamentoResult = Int32.Parse(cmbDistaccamento.SelectedValue.ToString());
                    MessageBox.Show(_cmbDistaccamentoResult.ToString());
                    //Convert.ToInt32((cmbDistaccamento.SelectedValue.ToString()));
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Impossibile convertire il valore(value) combobox da string a int \r\n" + ex.Message);
                }
            }