我用一下拉框显示表名,选中不同表名里,在datagrid里显示该表数据,每个表对应一个样式表格,每个样式表格的前几列都是一样的,且为只读,当选了A表后,datagrid显示出了A表的数据,将该表某行的某个只读列选中里面文字,然后再到下拉框里选择B表,datagrid里显示出了B表数据,但先前选中数据的那个格子上却有一块格子浮在一面,拉动dg的底部的滚动条,那浮动的格子却保存位置不动,也就是不管显示哪个表数据里选中了某个单元格数据,都会浮动在dg上,去不掉!这怎么回事啊!

解决方案 »

  1.   

    下拉框选项改变事件
    string tablename = cmb_tablename.SelectedValue.ToString();
    binddg("select * from "+tablename,tablename);绑定的函数
    private void binddg(string sqlstr,string tablename,string headtext)
    {
     ds = new DataSet();
     OleDbConnection oledbcon = new OleDbConnection(dbfun.access_str);
     OleDbDataAdapter da = new OleDbDataAdapter(sqlstr,oledbcon);
     da.Fill(ds,tablename);
     ds.Tables[tablename].DefaultView.AllowNew = false;
     dg_fl.DataSource = ds.Tables[tablename].DefaultView;
    }
    怎么看也没什么东西,而且那些在样式列里没有设为只读的,就不会出现这个问题!
    看图例
    图1:A表里某只读列,我点击一下,底部为控件色,显示不能编辑
      http://fisher.xundain.com/other/1.gif
    图2:选择B表,显示出的数据与A是不同的,但先前点击了一下的那个单元格里的字却盖住了B的部分数据,位置不会变
     http://fisher.xundain.com/other/2.gif
    而且只要点一次后面就会多一块,不会变少,只会增多!真搞不懂了,请各位帮忙,谢谢!
      

  2.   

    在绑定前将dg_fl.DataSource = null;