一个页面要从数据库中调8类新闻,数据库中这8类新闻都在一个表里
正常的做法
sql="select * from newstable where type=1"
dataset ds=new dataset();
这样吧第一句的数据填充到ds里
然后绑定到dataset1....
然后
sql="select * from newstable where type=2"
dataset ds1=new dataset();
这样吧第一句的数据填充到ds1里
然后绑定到dataset2....
-----------------------------------
这样页面页面要有8个dataset,严重影响效率。。可以不可以
sql="select * from newstable where type in(1,2,3,4,5,6,7,8)"
dataset ds=new dataset();
把数据填充到ds里,然后再根据type绑定到dataset中呢?
或者有没有更好的其他方法呢

解决方案 »

  1.   

    sql="select * from newstable where type in(1,2,3,4,5,6,7,8)"
    dataset ds=new dataset();
    查詢出數據后
    datagrid1.datasource = ds.Tables[0].DefaultView.RowFilter = "type=1";
    ...
    datagrid2.datasource = ds.Tables[0].DefaultView.RowFilter = "type=2";
    ...
    datagrid3.datasource = ds.Tables[0].DefaultView.RowFilter = "type=3";
    不過一般顯示新聞標題的話,結構都是一樣的,可以用用戶控件
      

  2.   

    sql="select * from newstable where type in(1,2,3,4,5,6,7,8)"
    dataset ds=new dataset();
    把数据填充到ds里,然后再根据type绑定到dataset中呢?
    --------------------------
    可以
      

  3.   

    DATASET是个数据集,可有N个表
      

  4.   

    倒,一个dataset实际上是一个datatable的数组声明一个ds之后
    ds.Table[0] ds.Table[1] .... 分别对不同的表就可以了
    按照楼上说的也没有问题,就是放到datatable里面再去判断
      

  5.   

    sql="select * from newstable where type in(1,2,3,4,5,6,7,8)"
    dataset ds=new dataset();
    把数据填充到ds里,然后:DataView dv1 = ds.Table[0].Copy().DefaultView;
    dv1.RowFilter = "[type] = 1";
    DataGrid1.DataSource = dv1;
    DataGrid1.DataBind();DataView dv2 = ds.Table[0].Copy().DefaultView;
    dv2.RowFilter = "[type] = 2";
    DataGrid2.DataSource = dv2;
    DataGrid2.DataBind();//.........
      

  6.   

    005,WHY使用.Copy()其實我覺得還是查詢得到8個datatable好一點
      

  7.   

    如果我没有记错的话,给RowFilter赋值之后会影响到数据集本身,不符合条件的数据会被移除~
      

  8.   

    經過我的測試,RowFilter以后,DataTable.Rows是沒有變化的
      

  9.   

    既然要写八组代码,不如fill到8个表里
      

  10.   

    edwardfay(都说养儿为防老,山高水远他乡流) 
    Eddie005(♂) №.零零伍 (♂) 方法都是对的...
    to:给RowFilter赋值之后会影响到数据集本身,不符合条件的数据会被移除~
    在我看来,,filter以后的数据,没有变化,,,同意edwardfay
      

  11.   

    问题是,我的ds我可不可以在前台使用循环的方式
    比如
    <%for(int i=0;i<=(int)ds.Tables["temptbl"].Rows.Count/2;i++){%>
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td height="5" align="center"><img src="images/fanchang16.gif" width="367" height="5"></td>
    </tr>
    </table>
    <table width="100%" border="0" cellpadding="0" cellspacing="0" class="ff">
    <tr align="center">
    <td width="22%"><%=ds.Tables["temptbl"].Rows[i*2]["名次"]%></td>
    <td width="38%"><A href='../Blog/userOpus.aspx?blogID=<%=ds.Tables["temptbl"].Rows[i*2]["userid"]%>&amp;opusID=<%=ds.Tables["temptbl"].Rows[i*2]["opusid"]%>' ><%=ds.Tables["temptbl"].Rows[i*2]["opusname"]%></a></td>
    <td width="25%"><A href='../Blog/index.aspx?blogID=<%=ds.Tables["temptbl"].Rows[i*2]["userid"]%>' ><%=ds.Tables["temptbl"].Rows[i*2]["nickname"]%></a></td>
    <td width="15%"><a href='javascript:GetShiTing("<%=ds.Tables["temptbl"].Rows[i*2]["opusid"]%>")'><img src="images/ting2.gif" width="20" height="17" style="BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none"></a></td>
    </tr>
    </table>
    <%}%>
      

  12.   

    hehe,楼主用asp的思想写asp.net的代码
      

  13.   

    不想用绑定,就是想用 asp的循环写asp.net的代码
    怎么写呢
      

  14.   

    LZ可以这样:
    sql="select * from newstable where type=1;select * from newstable where type=2;select * from newstable where type=3;"//用分号隔开
    dataset ds=new dataset();
    这样就可类推,可以取出数据放入DATASET,
    取值 是如取type=1的数据,就ds.tables[0],取type=2,就ds.tables[1],类推
    以前只试过三个语句的,不知道8个语句可行不?
    应该会行的,试试
      

  15.   

    DataSet 你可以通俗的理解为内存中的离线数据库!数据库放多个表你说可以不?ds.Tables[Item] Item指定你访问的具体表,类似于数组下标!
      

  16.   

    一次性取出来。再过滤吧。
    sql="select * from newstable where type in(1,2,3,4,5,6,7,8)"
    dataset ds=new dataset();
    datagrid1.datasource = ds.Tables[0].DefaultView.RowFilter = "type=1";
    ...
      

  17.   

    ds.Tables[0].DefaultView 这个做法比较好
      

  18.   

    //****你写一个接口吗,当你调用函数时,只传递相应的type就可以了.
      

  19.   

    建议sql语句不要使用in语句,而应该直接使用a =1 or a=2...
      

  20.   

    建议sql语句不要使用in语句,而应该直接使用a =1 or a=2... 用 or 吧
      

  21.   

    可以一次先把所有的数据都读到一个dataset里,然后分批填充datagrid.