我用DataGrid顯示我查詢的資料,將其邦定到一個DataSet,但當我的DataSet中的表結構改變後,DataGrid中就只能顯示我上一次表的字段,沒有數據,但我查詢的DataSet中确實有資料,我用過DataGrid.Refresh()和DataGrid.Invalidate()都不能解決問題。(我是在WindowFrom)

解决方案 »

  1.   

    你的datagrid是在可视化中编辑列的吧如果是的话,你绑定的dataset结构改变后,你的datagrid用到原dataset的那些列是否在新的dataset中也存在,如果不存在了,那肯定不行。你不要用datagrid的可视化来编辑datagrid列,用自动增长列就应该没问题。
    但用自动增长列的话,列的显示表头就是你数据库对应的列名称了
      

  2.   

    是否创建了tablestyle,如果是的话,把它删除了。
      

  3.   

    我的表結構是根據我下的SELECT 的SQL語句而變化的。
      

  4.   

    这个问题不用问了,没解决方法,从.Net2002到2005,全是这个效果
    前几天也有人问了同样的一个问题,也没好的解决方法(最后是销毁这个DataSet然后重建)
    这个问题的主要原因不在DataSet上,如果你在网格出错的情况下去检查DataSet的数据的话,会发现,DataSet的数据不存在任何问题,和你想要的结果一模一样,那一绑到DataGrid,看到的就是想回事了,感觉,就像一个突然死去的人活灵活现的出现在你的身边,而你去检查DataSet的数据时,你不得不相信这个Grid是鬼,活生生的鬼,我估计是绑定管理器的BUG,但找了找可操纵的方法属性什么的,到现在为止无解
      

  5.   

    可以试试看这样(Winform VS2005)
    public void BindGrid()
            {
                string connString = ConfigurationManager.AppSettings["connectionstring"];
                SqlConnection conn = new SqlConnection(connString);
                conn.Open();
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = str; //str,sqlstatement.
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                //关键是这里,不能重复填充为同一个表名            
                da.Fill(ds, TableName);  
                datagridview1.DataSource = ds;
                //同理,不能使用同一个表名,否则会出现残留列
                datagridview1.DataMember = TableName;
                conn.Close();
                conn.Dispose();
                da.Dispose();
             }
    我总结下来是这样一回事,就是多次填充Dataset不能使用同一个表名,同样不能使用相同的表名,否则会出现前一次绑定的残留列.
    我也是初学者,有错误,请多指教.
      

  6.   

    問題已解決,可能是jointan() 說的DataSet問題,我每次都新建一個DataSet,把上一次的DataSet.Dispose()就可以了。
      

  7.   

    可能是你邦定的DataSet和你查询得到的DataSet不是同一个对象!仔细检查下!