access_comm.Connection = access_conn;
                access_comm.CommandText = "select * from "+str_tablename+"";
                search_da.SelectCommand = access_comm;
                search_da.Fill(jzh_ds,str_tablename);
                MessageBox.Show(jzh_ds.Tables[str_tablename].Rows.Count.ToString());
                jzh_dgw.DataMember = str_tablename;
datagridview里只显示了一条记录,但实际上表里有三条记录,哪位知道是为什么?

解决方案 »

  1.   

    SQL语句拼写有问题,先改了再看
    "select * from "+str_tablename+"";to"select * from ‘"+str_tablename+"’";
      

  2.   

    to:wslinfeng(林风)
    查询语法错误 查询子句不完整
      

  3.   

    try..search_da.Fill(jzh_ds,str_tablename);
    jzh_dgw.DataSource=jzh_ds.Tables[str_tablename];
      

  4.   

    to:liujia_0421(SnowLover)
    解决了 谢谢 能请教一下原因吗?
      

  5.   

    lz:原因在于:DataSource与DataMember之间的区别:DataGridView.DataSource :DataGridView 所显示数据的数据源,包含 DataGridView 要显示的数据的对象。
    DataGridView.DataMember :数据源中 DataGridView 显示其数据的列表或表的名称,指DataSource 中 DataGridView 显示其数据的表或列表的名称。默认为 Empty。注意:
    在绑定到包含多个列表或表的数据源时,此属性非常有用。在绑定到包含单个列表或表的数据源时,无需设置此属性。例如,无需设置此属性,即可将 DataGridView 控件绑定到包含单个表的 DataSet。但是,如果 DataSet 包含多个表,则必须将此属性设置为其中某个表的名称。 
    来源MSDN.....
      

  6.   

    to:sdl2005lyx() 
    这段我也看过 不太明白这段话和datagridview对自动对数据的过滤有什么联系 请赐教
      

  7.   

    or try...search_da.Fill(jzh_ds,str_tablename);
    jzh_dgw.DataSource=jzh_ds;
    jzh_dgw.DataMember=str_tablename;
      

  8.   

    TO:to:liujia_0421(SnowLover)
    解决了 谢谢 能请教一下原因吗?
    你都没有设置数据源,只设置了一个数据成员,它怎么知道绑定哪个数据源的成员呢?
      

  9.   

    不知道你有没有做过ComboBox的数据绑定...//设置数据源
    this.comboBox1.DataSource=ds.Tables["student"];
    //设置显示的成员,显示学生的姓名
    this.comboBox1.DisplayMember="sname";我觉得DataGridView的DataMember与这里的DispayMember挺相似,这里如果你没有数据源,你只设置一个DispayMember,你说它怎么知道要绑定"student"表中的"sname"字段呢?DataGridView的DataMember主要是用于当数据源(比如dataset)有多个表时,用来切换绑定的表用的..
    比如你的DataGridView的数据源设置为一个DataSet(比如ds)..
    而ds中可能有多个表,我想显示哪个表的数据,我只需要设置一下DataMember即可...
    如果是单表的话可以像我上面写的那样:
    search_da.Fill(jzh_ds,str_tablename);
    jzh_dgw.DataSource=jzh_ds;
    jzh_dgw.DataMember=str_tablename;
    但其实没那个必要了..
    直接绑定这个单表就可以了...表达能力有限,不知道有没有说清楚...
      

  10.   

    lz:liujia_0421(SnowLover)已经把问题说得很清楚了,,DataSource 是来设置数据源,从字面意思应该很清楚,DataMember是从DataSource 中取一个出来对应到datagridview,其实我们一把直接用DataTable较好,或DataSet[tableName]。
      

  11.   

    datasource在formload事件里写了 所以在button_click事件里没写 上面写的代码是写在click事件里的 现在我把datasource的设置也放到了click里 就能显示所有记录了 所以并不是设置datasource的问题 况且填充完dataset后 我看过dataset.table[tablename].rows.count的值是3也是对的 可datagridview只显示一条记录 这是我搞不懂的地方
      

  12.   

    刚又写了个小测试..我也将设置datasource放在formload中,button_click下设置datamember..我用的oracle数据库...如下:显示一切下常 ... private void DataBind()
            {
                OleDbConnection con = new OleDbConnection("Provider=OraOLEDB.Oracle.1;data source=oracle;user id=butc;password=butc");
                OleDbDataAdapter sda = new OleDbDataAdapter("select * from student", con);
                DataSet ds = new DataSet();
                sda.Fill(ds, "student");
                this.dataGridView1.DataSource = ds;
            }        private void Form1_Load(object sender, EventArgs e)
            {
                DataBind();
            }        private void button2_Click(object sender, EventArgs e)
            {
                this.dataGridView1.DataMember = "student";
            }
      

  13.   

    我从新写了个测试的winform 竟然又正常了(datasource和datamember不在一个控件里) 不管怎么说谢谢二位了(liujia_0421(SnowLover)和sdl2005lyx())