none
以ObjectDataSource为数据源,在GridView中控制输出问题 RRS feed

  • 问题

  •      如题,具体问题就是想通过业务对象clickRanking类中GetDataSet()方法获取数据库中数据,
    并对返回结果集DataSet进行处理来实现在aspx页面的局部以固定行数显示数据,不借用分页!
         但是经测试自己写的方法中对DataSet对象超出固定行数的Rows[i]的删除Remove老有问题!不得其解!
        具体代码如下,望高手指出其中错误之处,或授实现该需求的更优的方法!万分感谢~在线等待中....
    using System;
    
    
    
    using System.Data;
    
    
    
    using System.Configuration;
    
    
    
    using System.Linq;
    
    
    
    using System.Web;
    
    
    
    using System.Web.Security;
    
    
    
    using System.Web.UI;
    
    
    
    using System.Web.UI.HtmlControls;
    
    
    
    using System.Web.UI.WebControls;
    
    
    
    using System.Web.UI.WebControls.WebParts;
    
    
    
    using System.Xml.Linq;
    
    
    
    using System.Data.SqlClient;
    
    
    
    
    
    
    
    /// <summary>
    
    
    
    ///clickRanking 的摘要说明:
    
    
    
    ///实现新闻的点击排行
    
    
    
    /// </summary>
    
    
    
    public class clickRanking
    
    
    
    {
    
    
    
    	public clickRanking()
    
    
    
    	{
    
    
    
    	}
    
    
    
    
    
    
    
        public DataSet GetDataSet()
    
    
    
        {
    
    
    
            string connstr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    
    
    
            SqlConnection sqlconn = new SqlConnection(connstr);
    
    
    
            DataSet ds = new DataSet();
    
    
    
            DataTable db;
    
    
    
            db = ds.Tables["NewsRanking"];
    
    
    
    
    
    
    
    
    
    
    
            string selectString = "SELECT Title FROM [tb_News] WHERE ([Viewed] IS NOT NULL) ORDER BY [Viewed] DESC, [ID]";
    
    
    
            sqlconn.Open();
    
    
    
            SqlDataAdapter da = new SqlDataAdapter(selectString, sqlconn);
    
    
    
            da.Fill(ds, "NewsRanking");
    
    
    
    
    
    
    
            sqlconn.Close();
    
    
    
            sqlconn = null;
    
    
    
    
    
    
    
    
    
    
    
            //控制GridView中数据显示的行数
    
    
    
             int num = 10;
    
    
    
            int Count = ds.Tables["NewsRanking"].Rows.Count;
    
    
    
            if (Count > num)
    
    
    
            {
    
    
    
                for (int i = 0; i < Count; i++)
    
    
    
                {
    
    
    
                    if (i > num)    //若i超过限定值num=10,将Rows[i]及其以后的删除
    
    
    
                        ds.Tables["NewsRanking"].Rows.RemoveAt(i);
    
    
    
                }
    
    
    
            }
    
    
    
            return ds;
    
    
    
        }
    
    
    
    
    
    
    
    }
    • 已编辑 朝华 2010年1月10日 6:06
    2010年1月9日 8:29

答案

  •       string selectString = "SELECT TOP(10) Title FROM [tb_News] WHERE ([Viewed] IS NOT NULL) ORDER BY [Viewed] DESC, [ID]";
    这样 直接输出

    • 已标记为答案 朝华 2010年1月10日 2:24
    2010年1月9日 10:15
  • 经验证,您的方法也是有效滴!同样感谢~其实先前我也写了这个代码,不过在我的错误书写下被淘汰了!误把 i--写为 i++了。惭愧!
    ps:悄悄告诉你,你的也有个小错误!呵呵~就是这句:
                if (i > num)    //若i超过限定值num=10,将Rows[i]及其以后的删除
    因为我是要限定为10个,所以条件应为 i>=num
    • 已标记为答案 朝华 2010年1月10日 2:28
    2010年1月10日 2:28

全部回复

  •       string selectString = "SELECT TOP(10) Title FROM [tb_News] WHERE ([Viewed] IS NOT NULL) ORDER BY [Viewed] DESC, [ID]";
    这样 直接输出

    • 已标记为答案 朝华 2010年1月10日 2:24
    2010年1月9日 10:15
  • 这是你删除datatable中数据的问题,
    datatable中数据的行索引是从上向下递增的,
    你如果从上向下删除,上面的行数据删除了,下面的行数据索引就变了,导致删除错误
    你应该从下向上删除.
    你这样写
     if (Count > num)

            {

                for (int i = Count-1; i >=0; i--)

                {

                    if (i > num)    //若i超过限定值num=10,将Rows[i]及其以后的删除

                        ds.Tables["NewsRanking"].Rows.RemoveAt(i);

                }

            }

    努力+方法=成功
    2010年1月9日 10:30
  • 经验证,您的方法也是有效滴!同样感谢~其实先前我也写了这个代码,不过在我的错误书写下被淘汰了!误把 i--写为 i++了。惭愧!
    ps:悄悄告诉你,你的也有个小错误!呵呵~就是这句:
                if (i > num)    //若i超过限定值num=10,将Rows[i]及其以后的删除
    因为我是要限定为10个,所以条件应为 i>=num
    • 已标记为答案 朝华 2010年1月10日 2:28
    2010年1月10日 2:28