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