- 日期 : 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
