datagrid中排序与分页遇到的问题
我的原始记录是这样的:6,5,4,3,2,1
我用datagrid的排序功能(在标题有下划线那种),那么datagrid显示1,2,3,4,5.6,这很正常。问题是这样的,当我用普通的分页(非自定义)和普通的排序,在datagrid中如果按下分页(例如第二页),datagrid就以我的原始记录的顺序显示,即6,5,4,3,2,1.请问这是怎么会事?
源代码如下
Dim connection1 As OleDbConnection
Dim startIndex As Integer
Dim SORTFIELD As String
Dim Provider = "Microsoft.Jet.OLEDB.4.0;"
Dim DataBase = Server.MapPath("human source.mdb")
Dim ConnStr = "Provider=" + Provider + "Data Source=" + DataBase
Dim dataset1 As DataSet = New DataSet()
Dim listboxtext As String
Dim cookiestring As String
Dim Cmd As OleDbDataAdapter
Dim delcomm As OleDbCommand
Dim updatecomm As OleDbCommand
Protected WithEvents Grid1 As System.Web.UI.WebControls.DataGrid
Dim insertcomm As OleDbCommand
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
startIndex = 0
SORTFIELD = "class_department"
BindGrid()
End If
End Sub
Sub BindGrid()
connection1 = New OleDbConnection(ConnStr)
connection1.Open()
Dim Cmd As OleDbDataAdapter
Cmd = New OleDbDataAdapter("Select * From 教务部门名", connection1)
Dim dataset1 As DataSet = New DataSet()
Cmd.Fill(dataset1, "教务部门名")
Dim dataview1 As DataView = New DataView(dataset1.Tables("教务部门名"))
dataview1.Sort = SORTFIELD
Grid1.DataSource = dataview1
Grid1.DataBind()
connection1.Close()
End Sub
Private Sub Grid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles Grid1.PageIndexChanged '处理分页代码
startIndex = e.NewPageIndex * Grid1.PageSize
Grid1.CurrentPageIndex = e.NewPageIndex
BindGrid()
End Sub
Private Sub Grid1_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles Grid1.SortCommand '处理排序代码
SORTFIELD = e.SortExpression
BindGrid()
End Sub
问题点数:0、回复次数:5Top
1 楼xubinhui(东方未名)回复于 2004-03-24 17:39:08 得分 0
你给一个例子:
<%@ Page language="c#" Codebehind="DataGrid分页排序.aspx.cs" AutoEventWireup="false" Inherits="StudyDotNet.DataGrid.DataGrid分页排序" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>DataGrid分页排序</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<!--************************问题描述区************************-->
<table width="100%" border="0">
<tr>
<td style="COLOR: red" align="center"><b>排序后再翻页的问题</b></td>
</tr>
<tr>
<td><b>出处:</b><A href="http://expert.csdn.net/Expert/topic/2865/2865760.xml?temp=.477627">http://expert.csdn.net/Expert/topic/2865/2865760.xml?temp=.477627</A></td>
</tr>
<tr>
<td><b>描述:</b>在点字段的排序后,然后再翻页,排序的顺序就乱了
</td>
</tr>
</table>
<hr>
<!--************************问题描述区(完)************************-->
<form id="Form1" method="post" runat="server">
<asp:datagrid id="DataGrid1" runat="server" Width="100%" AutoGenerateColumns="False" AllowPaging="True"
PageSize="4" DataKeyField="ID" AllowSorting="True">
<Columns>
<asp:BoundColumn DataField="ID" SortExpression="ID" HeaderText="编号"></asp:BoundColumn>
<asp:BoundColumn DataField="Name" SortExpression="Name" HeaderText="姓名"></asp:BoundColumn>
<asp:BoundColumn DataField="Sex" SortExpression="Sex" HeaderText="性别"></asp:BoundColumn>
<asp:BoundColumn DataField="Birthday" SortExpression="Birthday" HeaderText="生日"></asp:BoundColumn>
<asp:BoundColumn DataField="NativePlace" SortExpression="NativePlace" HeaderText="籍贯"></asp:BoundColumn>
<asp:BoundColumn DataField="Bursary" SortExpression="Bursary" HeaderText="奖学金"></asp:BoundColumn>
</Columns>
</asp:datagrid>
</form>
</body>
</HTML>
Top
2 楼xubinhui(东方未名)回复于 2004-03-24 17:39:33 得分 0
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace StudyDotNet.DataGrid
{
/// <summary>
/// DataGrid分页排序 的摘要说明。
/// </summary>
public class DataGrid分页排序 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lblOrderBy;
protected System.Web.UI.WebControls.DataGrid dtgCusts;
#region 控件申明
protected System.Web.UI.WebControls.DataGrid DataGrid1;
#endregion
#region Page_Load
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack) BindData();
}
#endregion
#region 数据绑定
private void BindData()
{
DataView dv =new DataView();
dv = CreateDataSource().DefaultView;
if (ViewState["SortExpression"]!=null)
{
dv.Sort = ViewState["SortExpression"].ToString();
}
DataGrid1.DataSource = dv;
DataGrid1.DataBind();
}
private DataTable CreateDataSource()
{
//学号、姓名、性别、生日、籍贯、联系号码、奖学金、照片
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Columns.Add("Sex");
dt.Columns.Add("Birthday");
dt.Columns.Add("NativePlace");
dt.Columns.Add("Tel");
dt.Columns.Add("Bursary");
dt.Columns.Add("Photo");
dt.Rows.Add(new object[] {"200403240000","风","男","1981-10-12","江西省","13870626580","500","Photo\\Photo200403240000.jpg"});
dt.Rows.Add(new object[] {"200403240001","云","女","1981-11-15","北京市","13870626581","300","Photo\\Photo200403240001.jpg"});
dt.Rows.Add(new object[] {"200403240002","冰","男","1980-01-23","江西省","13870626582","1500","Photo\\Photo200403240002.jpg"});
dt.Rows.Add(new object[] {"200403240003","雨","女","1982-10-21","上海市","13870626583","5000","Photo\\Photo200403240003.jpg"});
dt.Rows.Add(new object[] {"200403240004","秦始皇","男","1981-10-12","江西省","13870626584","0","Photo\\Photo200403240004.jpg"});
dt.Rows.Add(new object[] {"200403240005","李世民","男","1981-10-12","上海市","13870626585","50","Photo\\Photo200403240005.jpg"});
dt.Rows.Add(new object[] {"200403240006","武则天","女","1981-10-12","北京市","13870626586","500","Photo\\Photo200403240006.jpg"});
dt.Rows.Add(new object[] {"200403240007","拿破仑","男","1981-10-12","上海市","13870626587","600","Photo\\Photo200403240007.jpg"});
dt.Rows.Add(new object[] {"200403240008","希特勒","男","1981-10-12","江西省","13870626588","5000","Photo\\Photo200403240008.jpg"});
return dt;
}
#endregion
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
this.DataGrid1.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.DataGrid1_SortCommand);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
#region DataGrid事件
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex =e.NewPageIndex;
BindData();
}
private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
ViewState["SortExpression"] = e.SortExpression.ToString();
BindData();
}
#endregion
}
}
Top




