Combox选中的值显示system.Data行无法转换错误

时间:2013-04-04 18:25:41

标签: c# winforms sql-server-2008 combobox

我将Combobox1显示成员中的所有用户名作为用户名,Id作为值成员获取。

现在,当我在Combobox1中选择一个项目时,我启用了一个具有文本框,3个组合框和更新按钮的组合框。考虑了获取特定用户的combobox1的值成员并尝试在组框中显示这些详细信息(文本框包含用户名,3个组合框有部门指定角色的详细信息)。我的数据库表有外键(分离,指定和角色)。它只返回3个组合框值成员而不是显示成员(文本)。如何链接这些拖曳,以便在选择Combobox1中的用户名时相应的值应出现在文本框中以及3个组合框中。

这是我的代码:

     private void cmbBoxUpdateEmployee_SelectedIndexChanged_1(object sender, EventArgs e)
    {
          changecmbBoxValue();

    }     panelupdateEmployee.Visible = true;


    public void changecmbBoxValue()
    {

        try
        {
            textBoxUpdateEmployee.Enabled = true;
            cmbBoxUpdateEmpRoleID.Enabled = true;
            cmbBoxUpdateEmpDepartment.Enabled = true;
            cmbBoxUpdateEmpDesignation.Enabled = true;
            dbobj.Open();
            DataSet ds = new DataSet();
            if (!string.IsNullOrEmpty(cmbBoxUpdateEmployee.SelectedValue.ToString()))
            {
                string cmd = "select Name,RoleId,DepartmentId,DesignationId from tblEmployee where Name='" + cmbBoxUpdateEmployee.SelectedValue+ "'";

      //I get system.Datarow conversion not done error.
                ds = dbobj.ExecuteDataset(cmd);
                if ((ds.Tables[0].Rows.Count) > 0)
                {
                    textBoxUpdateEmployee.Text = Convert.ToString(ds.Tables[0].Rows[0][0].ToString());
                    cmbBoxUpdateEmpRoleID.SelectedIndex = Convert.ToInt32(ds.Tables[0].Rows[0][1].ToString());
                    cmbBoxUpdateEmpDepartment.SelectedIndex = Convert.ToInt32(ds.Tables[0].Rows[0][2].ToString());
                    cmbBoxUpdateEmpDesignation.SelectedIndex = Convert.ToInt32(ds.Tables[0].Rows[0][3].ToString());
                    lblupdatedelete.Text = " Update Successfully";
                    EmployeeUpdateInfo();
                    textBoxUpdateEmployee.Clear();
                }
            }              

        }
        catch (Exception ex)
        {
            MessageBox.Show("Error!!" + ex.Message);
        }
        finally
        {
            dbobj.Close();
        }


    }
  public void RoleData()
    {
        DataSet ds = new DataSet();
        string query = "select [Id],[Name] from tbl where IsDeleted=0";
        ds = dbobj.ExecuteDataset(query);
        cmbBoxUpdateRole.DataSource = ds.Tables["tablename"];
        cmbBoxUpdateRole.DisplayMember = "Name";
        cmbBoxUpdateRole.ValueMember = "Id";
        cmbBoxDeleteRole.DataSource = ds.Tables["tablename"];
        cmbBoxDeleteRole.DisplayMember = "Name";
        cmbBoxDeleteRole.ValueMember = "Id";

     }//role combobox..for department,designation also i did the same way to display in 3 comboboxes

我怎样才能做到这一点?任何想法

1 个答案:

答案 0 :(得分:0)

我解决了自己的问题。我将selectedIndex更改为selectedValue

cmbBoxUpdateEmpRoleID.SelectedValue = 
                             Convert.ToInt32(ds.Tables[0].Rows[0][1].ToString());
cmbBoxUpdateEmpDepartment.SelectedValue = 
                             Convert.ToInt32(ds.Tables[0].Rows[0][2].ToString());
cmbBoxUpdateEmpDesignation.SelectedValue = 
                             Convert.ToInt32(ds.Tables[0].Rows[o][3].Tostring());

我需要在changecmbvalue()事件中调用方法selectedValuechanged。它按预期工作。