关注联楷|返回首页 | 网站案例 | 帮助中心

合作共赢、快速高效、优质的网站建设提供商

上海网站建设 

服务热线:021-61394118

上海联楷科技

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



如没特殊注明,文章均为上海联楷网络原创,转载请注明来自:http://www.linksj.com/contact/20151229/n7587.html

上海联楷网络新闻