C#WinForm中Combobox绑定值问题
作者:佚名 时间:2012-05-01
private void btnGetDBs_Click(object sender, EventArgs e)
{
string strconnection = "数据库连接字符串" ;
conn = new SqlConnection(strconnection);
string sql = "Sql语句";
SqlDataAdapter da = new SqlDataAdapter(sql,conn);
DataSet ds = new DataSet();
da.Fill(ds, "table");
cmbDBs.DisplayMember = "Name";
cmbDBs.ValueMember = "Name";
cmbDBs.DataSource = ds.Tables[].DefaultView;
}
private void cmbDBs_SelectedValueChanged(object sender, EventArgs e)
{
string strconnection = "数据库连接字符串";
conn = new SqlConnection(strconnection);
string sql = string.Format("Sql语句", cmbDBs.SelectedValue.ToString());
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds, "table");
cmbTables.DataSource = ds.Tables[].DefaultView;
cmbTables.DisplayMember = "Name";
cmbTables.ValueMember = "Name";
}
可是在获得cmbDBs.SelectedValue.ToString()值时说“未将对象引用到实例”或者就是取到“System.data.dataRowView”的值。后来在网上了下,只要将绑定第二个combobox的代码写在private void cmbDBs_SelectedIndexChanged(object sender, EventArgs e)事件中就能正确取出值了。即:
private void btnGetDBs_Click(object sender, EventArgs e)
{
string strconnection = "server=" + txtServiceIP.Text.Trim() + ";uid=" + txtUid.Text.Trim() + ";pwd=" + txtPwd.Text.Trim();
conn = new SqlConnection(strconnection);
string sql = "Select [Name] FROM Master..SysDatabases where DBId> ORDER BY Name";
SqlDataAdapter da = new SqlDataAdapter(sql,conn);
DataSet ds = new DataSet();
da.Fill(ds, "tb");
cmbDBs.DisplayMember = "Name";
cmbDBs.ValueMember = "Name";
cmbDBs.DataSource = ds.Tables[].DefaultView;
}
private void cmbDBs_SelectedIndexChanged(object sender, EventArgs e)
{
string strconnection = "server=" + txtServiceIP.Text.Trim() + ";uid=" + txtUid.Text.Trim() + ";pwd=" + txtPwd.Text.Trim();
conn = new SqlConnection(strconnection);
string sql = string.Format("Select Name FROM {}.dbo.SysObjects Where XType='U' ORDER BY Name ", cmbDBs.SelectedValue.ToString());
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds, "tb");
cmbTables.DisplayMember = "Name";
cmbTables.ValueMember = "Name";
cmbTables.DataSource = ds.Tables[].DefaultView;
}
另外在绑定时最好将这样写(个人觉得)
cmbTables.DisplayMember = "Name"; cmbTables.ValueMember = "Name"; cmbTables.DataSource = ds.Tables[].DefaultView;
在默认的情况下combobox控件是可以自己手动输入的,如果想让它只读则只需改变DropDownList属性为DropDownList