FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 4761|回复: 7
打印 上一主题 下一主题

还是新手问题,请教

[复制链接]
跳转到指定楼层
楼主
发表于 2016-9-2 11:24:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我查询出来之后,有8条记录,但是我设置了每页显示5条,然后这样的话就有2页,但是我点击下一页,我的数据就重新绑定到我所有记录上去了,然后就显示全部的记录了怎么绑定查询出来的记录,重新写一个吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
推荐
发表于 2016-9-4 22:24:19 | 只看该作者
特别注意:下面的代码是官网示例中模拟的(由于官网示例没有连接数据库,才这么写,真实项目千万别这么用),真实的项目是直接SQL语句查询出分页数据!!!!!
  1. private DataTable GetPagedDataTable(string sql)
  2.         {
  3.             int pageIndex = Grid1.PageIndex;
  4.             int pageSize = Grid1.PageSize;

  5.             string sortField = Grid1.SortField;
  6.             string sortDirection = Grid1.SortDirection;

  7.             DataTable table2 = GetDataTable(sql);

  8.             DataView view2 = table2.DefaultView;
  9.             view2.Sort = String.Format("{0} {1}", sortField, sortDirection);

  10.             DataTable table = view2.ToTable();

  11.             DataTable paged = table.Clone();

  12.             int rowbegin = pageIndex * pageSize;
  13.             int rowend = (pageIndex + 1) * pageSize;
  14.             if (rowend > table.Rows.Count)
  15.             {
  16.                 rowend = table.Rows.Count;
  17.             }

  18.             for (int i = rowbegin; i < rowend; i++)
  19.             {
  20.                 paged.ImportRow(table.Rows);
  21.             }

  22.             return paged;
  23.         }
复制代码



推荐
发表于 2016-9-5 15:50:58 | 只看该作者
longtt 发表于 2016-9-2 17:37
。。。初学者,不是很懂,我没用到数据库分页还是啥,请教

我也是刚毕业....    你是将全部的数据取出来,放到内存当中,然后再在其中取n条数据显示,这个可以通俗的理解成假分页
另外一种是通过SQL语句去进行分页,例如这样的SQL语句,select top PageSize * from TableName where PrimaryKey not in (select top (PageIndex-1)*PageSize),他是从数据库里直接读取数据, 这算是真分页

第一种你在数据量较小的时候可能看不大出来,但是当你数据量很大的时候,比如百万条数据,你会卡死的
不过, 一般公司的话都会有自己的分页方法,你可以去百度一下   分页存储过程
沙发
发表于 2016-9-2 14:05:53 | 只看该作者
猜测:在点击下一页事件中,你的绑定是有问题的,没有GetPagedDataTable().
板凳
 楼主| 发表于 2016-9-2 14:23:11 | 只看该作者
Gnid 发表于 2016-9-2 14:05
猜测:在点击下一页事件中,你的绑定是有问题的,没有GetPagedDataTable().

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using FineUI;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
using System.Text;

namespace FinUiTest.Movie
{
    public partial class FrmMain : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                // 删除选中行
                btnAdd.OnClientClick = Window1.GetShowReference("./FrmMainAdd.aspx");
                //btnUpdate.OnClientClick = Window2.GetShowReference("./FrmMainUpdate.aspx");
                BindGrid();
            }
        }
        #region BindGrid

        private void BindGrid()
        {
            string sql = "select Id,Movie_Name,Movie_Director,Date_Released from Record";
            // 1.设置总项数(特别注意:数据库分页一定要设置总记录数RecordCount)
            Grid1.RecordCount = GetTotalCount(sql);
            // 2.获取当前分页数据
            DataTable table = GetPagedDataTable(sql);
            //DataTable table = GetDataTable();

            // 3.绑定到Grid
            Grid1.DataSource = table;
            Grid1.DataBind();
        }
        private DataTable GetPagedDataTable(string sql)
        {
            int pageIndex = Grid1.PageIndex;
            int pageSize = Grid1.PageSize;

            string sortField = Grid1.SortField;
            string sortDirection = Grid1.SortDirection;

            DataTable table2 = GetDataTable(sql);

            DataView view2 = table2.DefaultView;
            view2.Sort = String.Format("{0} {1}", sortField, sortDirection);

            DataTable table = view2.ToTable();

            DataTable paged = table.Clone();

            int rowbegin = pageIndex * pageSize;
            int rowend = (pageIndex + 1) * pageSize;
            if (rowend > table.Rows.Count)
            {
                rowend = table.Rows.Count;
            }

            for (int i = rowbegin; i < rowend; i++)
            {
                paged.ImportRow(table.Rows);
            }

            return paged;
        }
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;

            BindGrid();
        }

        private int GetTotalCount(string sql)
        {
            return GetDataTable2(sql).Rows.Count;
        }

        private DataTable GetDataTable(string sql)
        {
            DataTable dt = GetTable(sql);
            return dt;
        }

        private DataTable GetDataTable2(string sql)
        {
            DataTable dt = GetTable(sql);
            return dt;
        }


        static string connStr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
        public static DataTable GetTable(string sql, params SqlParameter[] param)
        {
            SqlConnection conn = new System.Data.SqlClient.SqlConnection(connStr);
            //conn.ConnectionString = db.Connection.ConnectionString;
            //if (conn.State != ConnectionState.Open)
            //{
            //    conn.Open();
            //}
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = sql;

            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            DataTable table = new DataTable();
            adapter.Fill(table);

            conn.Close();//连接需要关闭
            conn.Dispose();
            return table;
        }
        #endregion     

        //static string connStr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
        protected void btnDelete_Click(object sender, EventArgs e)
        {
            //string sql = "Delete from Record where 1=1";
            //int n = 0;
            //SqlConnection conn = new SqlConnection(connStr);
            //SqlCommand cmd = new SqlCommand(sql, conn);
            //conn.Open();
            //n = cmd.ExecuteNonQuery();
            //if (n == 0)
            //{
            //    Alert.ShowInTop("当前未选中,无法删除!");
            //    return;
            //}
            //else if (n > 0)
            //{
            //    Alert.ShowInTop("删除成功!");
            //}
            int id = 0;
            int[] selections = Grid1.SelectedRowIndexArray;
            if (selections.Length==0)
            {
                Alert.ShowInTop("当前未选中,无法删除!");
            }
            foreach (int rowIndex in selections)
            {
                id = Convert.ToInt32(Grid1.Rows[rowIndex].Values[1]);
            }
            string sql = "Delete from Record where Id="+id+"";
            int n = 0;
            SqlConnection conn = new SqlConnection(connStr);
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            n = cmd.ExecuteNonQuery();
            if (n == 0)
            {
                Alert.ShowInTop("当前未选中,无法删除!");
                return;
            }
            else if (n > 0)
            {
                Alert.ShowInTop("删除成功!");
                BindGrid();
            }
            conn.Close();
        }
        //public void Refresh(bool isAdded = false)
        //{
        //    string sql = "select Id,Movie_Name,Movie_Director,Date_Released from Record";
        //    SqlConnection conn = new SqlConnection(connStr);
        //    SqlCommand cmd = new SqlCommand(sql, conn);
        //    DataTable dt = new DataTable();
        //    SqlDataAdapter sda = new SqlDataAdapter(cmd);
        //    sda.Fill(dt);
        //    Grid1.DataSource = dt;
        //}

        protected void btnSelect_Click(object sender, EventArgs e)
        {
            string textSelect = textselect.Text;
            string where = "";
            if (textSelect != "" && textSelect != null)
            {
                where += " and (Movie_Name like '%" + textSelect + "%' or Movie_Director like '%" + textSelect + "%')";
            }
            string sql = "select * from Record where 1=1 "+where;
            
            // 1.设置总项数(特别注意:数据库分页一定要设置总记录数RecordCount)
            
            // 2.获取当前分页数据
            DataTable table = GetPagedDataTable(sql);
            //DataTable table = GetDataTable();
            Grid1.RecordCount = GetTotalCount(sql);
            // 3.绑定到Grid
            Grid1.DataSource = table;
            Grid1.DataBind();
        }
    }
}
地板
发表于 2016-9-2 17:01:39 | 只看该作者
本帖最后由 下架学长 于 2016-9-2 17:09 编辑

仔细看了一下你的分页过程,貌似是先全部查出来再在其中取数据,那还要用数据库分页干嘛?
5#
 楼主| 发表于 2016-9-2 17:37:55 | 只看该作者
下架学长 发表于 2016-9-2 17:01
仔细看了一下你的分页过程,貌似是先全部查出来再在其中取数据,那还要用数据库分页干嘛? ...

。。。初学者,不是很懂,我没用到数据库分页还是啥,请教
8#
 楼主| 发表于 2016-9-7 10:13:06 | 只看该作者
sanshi 发表于 2016-9-4 22:24
特别注意:下面的代码是官网示例中模拟的(由于官网示例没有连接数据库,才这么写,真实项目千万别这么用) ...

呃呃,谢谢老大
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-24 06:11 , Processed in 0.048894 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表