string Connection=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection con=new SqlConnection(Connection);
SqlDataAdapter sda=new SqlDataAdapter("select top 15 * from hyxx where Typeid=1 order by dateandtime desc",con);
DataSet ds=new DataSet();
sda.Fill(ds,"hyxx");
this.rpnew.DataSource=ds.Tables["hyxx"].DefaultView;
this.rpnew.DataBind();

sda.SelectCommand.CommandText="select top 15 * from hyxx where Typeid=2 order by dateandtime desc";
sda.Fill(ds,"hyxx");
this.rpnew2.DataSource=ds.Tables["hyxx"].DefaultView;
this.rpnew2.DataBind();
这是后台里的代码,我控制用的是repeater控件,但是rpnew2所显示的是30条(包含rpnew的15条)这是怎么回事呢?  代码有那里错误呢?上面的的数据都是放在一个表格里面,如果放在不同放表格里,是不会出现这样的问题的。

解决方案 »

  1.   

    问题出在 sda.Fill(ds,"hyxx");
    你把两次结果都fill到了同一张表里面,当然第二次填充后结果里面就有30条了(15+15)!
    你可以第一次:
    sda.Fill(ds,"hyxx1");
    this.rpnew.DataSource=ds.Tables["hyxx1"].DefaultView;
    this.rpnew.DataBind();
    第二次:
    sda.Fill(ds,"hyxx2");
    this.rpnew.DataSource=ds.Tables["hyxx2"].DefaultView;
    this.rpnew.DataBind();这样就解决问题了!
      

  2.   

    因为你一共向DATASET的hyxx表中填充了两次1.sda.Fill(ds,"hyxx");2.sda.Fill(ds,"hyxx");也就是说在第二次填充表hyxx时,将记录追加到了hyxx中,所有会有15+15=30条的数据,应改第二次填充的表的名字,这样就不会有30条记录了.DATASET中可放多个表只要表名不同,就能区分数据的.将第二次的填充改为:sda.Fill(ds,"hyxx2"); 你试试,肯定不会是30条记录了
      

  3.   

    谢谢楼上,可以了, 随便问一下另一个问题
    <%# DataBinder.Eval(Container.DataItem,"title") %>怎么样得到前几个字数据呢?? 就像asp里的replace<%# DataBinder.Eval(Container.DataItem,"dateandtime","{0:D}") %>怎么样设置
    才能让他显示出 如  2006-11-10我上面的显示是2006年11月10日,问题解马上发分
      

  4.   

    %# DataBinder.Eval(Container.DataItem,"dateandtime","{0:d}") %>
      

  5.   

    设置字符串格式 ToShortDateString
      

  6.   

    <%# DataBinder.Eval(Container.DataItem,"title").ToString().SubString(0,x) %>x为要取的字符数,试试