show ahID:ahshow
26810次访问,排名4255(-1)好友2人,关注者14
.net
ahshow的文章
原创 50 篇
翻译 0 篇
转载 37 篇
评论 9 篇
ahshow的公告
把一点小经验和技巧发在上面,希望自己和看博的人都能得到启发,共同进步!(有什么意见,要求请回复!)

希望看我博客的人多回复,多给点写文章的动力给我。
Google
最近评论
过路的:有用处,多谢了~
houlei:cmd.ExecuteScalar()返回的是首行首列的值,它返回的是Object类型的.不是这个表的行的总数.
19451646:ctl.Value = (DateTime)this.Value;
应该先判断是不是空在转换,否则会出错,大多数情况下初始值都是空的.
ahshow:因为他的sql查询语句是:
select count(*) from Products
这个语句是查询数据总数啊
cmd.ExecuteScalar()返回的是第一行的值
但是返回的是这个表的count就是总数啊

另外提一下,这篇文章是转的,我用代码测试好像没通过,感觉不是很好,你可以看我“原创”的那篇文章“使用ObjectDat……
国语:GetProdcutsCount() 方法中
int count = (int)cmd.ExecuteScalar();

就可以表示查询到的数据总数吗?

cmd.ExecuteScalar()不是只返回第一行的值吗?


文章分类
收藏
    相册
    Blogs
    【孟子E章】
    c#3.0
    flylasly Moto E2 SFC模拟器
    wolf's cave
    代振军BLOG
    叶帆工作室
    宝玉的blog
    开心就好的代码人生
    张合福的专栏
    思归呓语
    愚翁专栏
    房客 的C#集
    星宿.net(WF)
    李洪根
    蝈蝈俊.net
    蝈蝈俊.net(CSDN)
    谭振林(THIN)
    Webs
    codeproject
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 如何实现ObjectDataSource与GridView的分页操作 收藏

    新一篇: 使用ObjectDataSource和GridView分页 | 旧一篇:  GridView&ObjectDataSource新特性小记 懒人篇(一) 分页上路

    如何实现ObjectDataSource与GridView的分页操作
    在asp.net2.0中ObjectDataSource可以说是业务层和UI层的桥樑。分页方式有有两种。
    第一种:一次性把所有数据取出来,全部由GridView的内部机制实现分页和排序。
    在ProductDAL.cs中:
     public static DataTable GetProductList()
    {
            string sql = "select ProductID,ProductName,UnitPrice,UnitsInStock from Products ";
            SqlDataAdapter da = new SqlDataAdapter(sql, ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
     }

    在PagingGridView.aspx中
            <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetProductList"
                TypeName="ProductDAL" ></asp:ObjectDataSource>
            <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
                DataSourceID="ObjectDataSource1">
                <Columns>
                    <asp:BoundField DataField="ProductID" HeaderText="ProductID" SortExpression="ProductID" />
                    <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
                    <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" />
                    <asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" SortExpression="UnitsInStock" />
                </Columns>
            </asp:GridView>

    但由于每次分页、排序操作都要取出所有数据,省功夫,但效率差。

    第二种方法:
    自定义分页和排序,即根据当前所在页和页记录大小和排序。而不是一次性取出所有数据。
    首先介绍ObjectDataSource关于自定义分页和排序的几个属性.
    AllowPaging属性:当要实现自定义分页时必须把AllowPaging值设置为true。
    SelectMethod属性:指向获取数据的方法名称,本例设置为GetProducts。其所指向的方法的参数名与ObjectDataSource的StartRowIndexParameterName、MaximumRowsParameterName、SortParameterName相对应(注意:参数不分先后,但参数名要一一对应相同,否则出错)
    StartRowIndexParameterName属性:当前页的第一条数据在查询数据中的位置,它的值与SelectMethod所指向的方法的相应参数,默认值为startRowIndex。
    MaximumRowsParameterName属性:当前页面的记录行数,它的值与SelectMethod所指向的方法的相应参数,默认值为maximumRows。
    SortParameterName属性:排序表达式,与SelectMethod所指向的方法的排序参数相对应。如果不设置排序,此属性可以为空。在本例中设置为sortExpression。
    SelectCountMethod属性:指向查询到的数据总数的方法名称。本例中是GetProdcutsCount。注意:这个是自定义分页必须设置的属性。
    在ProductDAL.cs中(Product实体类省略)
     

    public static List<Product> GetProducts(int startRowIndex,int maxinumRows , string sortExpression)
        {
            string sql = "select ProductID,ProductName,UnitPrice,UnitsInStock from Products ";
            if (!string.IsNullOrEmpty(sortExpression))
                sql += " order by " + sortExpression;
            SqlDataAdapter da = new SqlDataAdapter(sql, ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
            DataTable dt = new DataTable();
            da.Fill(dt);
            List<Product> results = new List<Product>();
            int currentIndex = startRowIndex;
            int itemRead = 0;
            int totalRecords = dt.Rows.Count;
            while (itemRead < maxinumRows && currentIndex < totalRecords)
            {
                Product p = new Product();
                p.ProductID = Convert.ToInt32(dt.Rows[currentIndex]["ProductID"]);
                p.ProductName = dt.Rows[currentIndex]["ProductName"].ToString();
                if (dt.Rows[currentIndex]["UnitPrice"].Equals(DBNull.Value))
                    p.UnitPrice = 0;
                else
                    p.UnitPrice = Convert.ToDecimal(dt.Rows[currentIndex]["UnitPrice"]);
                if (dt.Rows[currentIndex]["UnitsInStock"].Equals(DBNull.Value))
                    p.UnitsInStock = 0;
                else
                    p.UnitsInStock = Convert.ToInt32(dt.Rows[currentIndex]["UnitsInStock"]);
                results.Add(p);
                itemRead++;
                currentIndex++;
            }
            return results;

        }
      public static int GetProdcutsCount()
        {
            string sql = "select count(*) from Products";
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = sql;
            cmd.Connection = conn;
            conn.Open();
            int count = (int)cmd.ExecuteScalar();
            conn.Close();
            return count;
        }

     

     

     

    二、用户界面层中的实现
    在Default.aspx中:
            <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetProducts"
                TypeName="ProductDAL" SelectCountMethod="GetProdcutsCount" StartRowIndexParameterName="startRowIndex" MaximumRowsParameterName="maxinumRows" SortParameterName="sortExpression"  EnablePaging="True"> </asp:ObjectDataSource>
                <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" AllowSorting="True" OnRowDataBound="GridView1_RowDataBound">
                <Columns>
                    <asp:BoundField DataField="ProductID" HeaderText="ProductID" SortExpression="ProductID" />
                    <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
                    <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" />
                    <asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" SortExpression="UnitsInStock" />
                </Columns>
            </asp:GridView> 

    发表于 @ 2007年08月30日 10:20:00|评论(loading...)|编辑

    新一篇: 使用ObjectDataSource和GridView分页 | 旧一篇:  GridView&ObjectDataSource新特性小记 懒人篇(一) 分页上路

    评论

    #国语 发表于2007-09-29 16:21:38  IP: 60.176.243.*
    GetProdcutsCount() 方法中
    int count = (int)cmd.ExecuteScalar();

    就可以表示查询到的数据总数吗?

    cmd.ExecuteScalar()不是只返回第一行的值吗?


    #ahshow 发表于2007-09-30 08:45:02  IP: 124.21.162.*
    因为他的sql查询语句是:
    select count(*) from Products
    这个语句是查询数据总数啊
    cmd.ExecuteScalar()返回的是第一行的值
    但是返回的是这个表的count就是总数啊

    另外提一下,这篇文章是转的,我用代码测试好像没通过,感觉不是很好,你可以看我“原创”的那篇文章“使用ObjectDataSource和GridView分页 ”,代码测试通过了。
    #houlei 发表于2007-10-27 19:19:08  IP: 61.136.105.*
    cmd.ExecuteScalar()返回的是首行首列的值,它返回的是Object类型的.不是这个表的行的总数.
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © ahshow