重发:
为什么:把Dataset绑定到Datagrid,一般来说,需要把一个Dataview绑定到Datagrid,而不是直接绑定Dataset. 如:
DataSet dsSel = new DataSet();
conn = new OleDbConnection(sConn);
OleDbDataAdapter MyAdapter = new OleDbDataAdapter(strSel,conn);
MyAdapter.Fill(dsSel,"CQBianRenBG");
DataGrid1.DataSource = dsSel.Tables["CQBianRenBG"].DefaultView;//为什么一般不直接等于dsSel?
DataGrid1.DataBind();

解决方案 »

  1.   

    DataSet是一个很大的数据容器。其中包含DataTableCollection,它才是可以用做数据源的DataTable的对象集合。
    数据源一般使用DataTable或DataView。
    DataTable.DefaultView是一个DataTable的默认视图,它是一个DataView。
    实际上
    DataGrid1.DataSource = dsSel.Tables["CQBianRenBG"].DefaultView;

    DataGrid1.DataSource = dsSel.Tables["CQBianRenBG"];
    在你的代码里是等效的。
    DataSet好象是不能直接做为数据源的。
      

  2.   

    DataSet不能作为数据源的话叫不叫DataSet了一般常用的做法都是直接绑定DataSet
    方法是 this.dataGrid1.DataSource = MyDataSet.Tables["表名"];
    或着:
    this.dataGrid1.DataSource = MyDataSet.Tables["表名"].DefaultView;
    其实把DataSet理解为在内存中的数据库就行了;
      

  3.   

    而且用DataSet作为数据容器的话,可以不使用DataAdapter这种效率很低的方式,用DataReader结合DataRow一行一行的读取数据的效率要高很多.
      

  4.   

    摆脱以后大家提到DataGrid控件的使用方法的时候先说明是Web控件还是WinForm控件好不好,我觉得两个东西是有很多差异的。这样的话大家回答问题也会有针对性啊!!!
      

  5.   

    DataSet是一个很大的容器,而Tables[....]只是其中一个,你可以写多个DataAdapter,再通过da.fill(ds,"A"),da.fill(ds,"B")在不同的DataGrid里用source来绑定同一个Dataset下的不同的tables[],这个你可以试试,如下的代码:
    SqlConnection cn;
    SqlDataAdapter da;
    SqlDataAdapter d;
    DataSet ds;
    String strSQL;
    String strS;
    cn=new SqlConnection("server=BSERVER;uid=sa;pwd=;database=pubs");
    try
    {
     cn.Open();
     Response.Write("服务器已经联接!"+"<BR>");
     Response.Write(cn.Database+"  "+"服务器状态是:");
     Response.Write(cn.State+"<BR>");
     Response.Write("<BR>");
     strSQL="Select au_fname,au_lname from authors";
     strS="Select au_fname from authors";
     da=new SqlDataAdapter(strSQL,cn);
     d=new SqlDataAdapter(strS,cn);
     ds=new DataSet();
     da.Fill(ds,"Authors");
     d.Fill(ds,"A");
     DataGrid1.DataSource=ds.Tables["Authors"].DefaultView;
     DataGrid1.DataBind();
     DataGrid2.DataSource=ds.Tables["A"].DefaultView;
     DataGrid2.DataBind();
    }
    catch(SqlException sx)
    {
    Response.Write("Connection failed:"+sx.Message);
    }
    finally
    {
    if(cn.State==ConnectionState.Open)
     cn.Close();
    }
      

  6.   

    靠!
    我真服了你!
    MyDataSet.Tables["表名"]
    难道你还没有理解这是个什么对象么?
    这是个DataTable对象。如果有什么怀疑请查看MyDataSet.Tables["表名"].GetType()
    也就是说你实际绑定的是个DataTable对象。this.dataGrid1.DataSource = MyDataSet.Tables["表名"];
    上句是你自己的代码,它就是把dataGrid1绑定到DataSet中的表名为“表名”的DataTable。
    那个Tables就是一个TableCollection(DataTable的集合)。
    你所做的不是将控件绑定到DataSet,而是绑定到DataSet中的一张DataTable。这就是你那段代码的意思。