关于datagrid排序和分页的问题

soft2000 2004-03-20 05:48:37
我这里做了个DATAGRID的东西,现在排序和过滤完了后,在翻页就不能用了,下面是代码,帮忙给看看,谢谢

Imports System.Data.Common
Imports ADODB
Imports System.Data.oledb

Public Class webtest
Inherits System.Web.UI.Page
Private dtview As DataView = New DataView

#Region " Web 窗体设计器生成的代码 "

'该调用是 Web 窗体设计器所必需的。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
Protected WithEvents Button1 As System.Web.UI.WebControls.Button

'注意: 以下占位符声明是 Web 窗体设计器所必需的。
'不要删除或移动它。
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
'不要使用代码编辑器修改它。
InitializeComponent()
End Sub

#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
If (Not IsPostBack) Then
getdataset()
End If
End Sub
Private Sub DataGrid1_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles DataGrid1.SortCommand
Dim dt As DataTable = getdataset().Tables("zlfw")
dtview = New DataView(dt)
'Dim dv As DataView = New DataView(getdataset().Tables("zlfw"))
'dv.Sort = e.SortExpression.ToString()
'DataGrid1.DataSource = dv
dtview.Sort = e.SortExpression.ToString()
DataGrid1.DataSource = dtview
DataGrid1.DataBind()
End Sub

Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand
getdataset()
DataGrid1.EditItemIndex = e.Item.ItemIndex
DataGrid1.DataBind()
End Sub

Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.CancelCommand
getdataset()
DataGrid1.EditItemIndex = -1
Page.DataBind()
End Sub
'=====================表和记录集同步函数,返回dataset=======================
Private Function getdataset() As DataSet
Dim conn As conndbstring = New conndbstring
Dim myconn As OleDb.OleDbConnection = New OleDb.OleDbConnection
myconn.ConnectionString = conn.setconndbstr
Dim selectCMD As OleDb.OleDbCommand = New OleDb.OleDbCommand("select id as 编号,sfzh as 身份证号, xm as 姓名,xb as 性别,fwcs as 服务处所,zz as 住址,czfwdz as 出租房屋地址,lxdh as 联系电话 ,fjs as 房间数,jwq as 警务区 from zdfw", myconn)
Dim custDA As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
Dim custDS As DataSet = New DataSet
custDA.SelectCommand = selectCMD
custDA.Fill(custDS, "zlfw")
Try
myconn.Open()
DataGrid1.DataSource = custDS.Tables("zlfw")
Page.DataBind()
Catch ex As Exception
Response.Write("连接数据库或SQL语句有问题!")
End Try

If dtview.ToString Is "" Then
Response.Write("df")
End If
Response.Write(dtview.Sort.ToString)

myconn.Close()
Return custDS
End Function
'=========================删除选定的数据行,函数参数id是表的id字段==============================
Private Function deleterow(ByVal delsql As String) As Integer
Dim conn As conndbstring = New conndbstring
Dim myconn As OleDb.OleDbConnection = New OleDb.OleDbConnection
myconn.ConnectionString = conn.setconndbstr
Dim deletecmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(delsql, myconn)
Try
myconn.Open()
deletecmd.ExecuteNonQuery()
myconn.Close()
Return 0
Catch ex As Exception
Response.Write("连接数据库或SQL语句有问题!")
Return -1
End Try
End Function
'=============================删除更新数据传入参数为sql语句===================================
Private Function updaterow(ByVal sql As String) As Integer
Dim conn As conndbstring = New conndbstring
Dim myconn As OleDb.OleDbConnection = New OleDb.OleDbConnection
myconn.ConnectionString = conn.setconndbstr
Dim deletecmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(sql, myconn)
Try
myconn.Open()
deletecmd.ExecuteNonQuery()
myconn.Close()
Return 0
Catch ex As Exception
Response.Write("连接数据库或SQL语句有问题!")
Return -1
End Try

End Function

...全文
60 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xubinhui 2004-03-24
  • 打赏
  • 举报
回复
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
{
#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
}
}
xubinhui 2004-03-24
  • 打赏
  • 举报
回复
给你一个例子:刚刚做的,调试成功了。
<%@ 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://dotnet.aspx.cc/ShowDetail.aspx?id=B3F3462D-DC34-41CE-9FEE-6965B2A3D1AD">http://dotnet.aspx.cc/ShowDetail.aspx?id=B3F3462D-DC34-41CE-9FEE-6965B2A3D1AD</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>
xubinhui 2004-03-24
  • 打赏
  • 举报
回复
记住翻页前的SortExpression
soft2000 2004-03-23
  • 打赏
  • 举报
回复
??
soft2000 2004-03-22
  • 打赏
  • 举报
回复
我是那样做的啊!
wangsaokui 2004-03-21
  • 打赏
  • 举报
回复
因为翻页要重新databind,所以你排序先建个dataview(每次排序的dataview数据都不同),再databind和翻页,这时databind的是你的新的dataview(你排序后的)。
zhongkeruanjian 2004-03-21
  • 打赏
  • 举报
回复
比较好的方法是你得记住每一次排序的SortExpression
如果翻页,你得恢复这个SORTEXPRESSION
soft2000 2004-03-21
  • 打赏
  • 举报
回复
在点字段的排序后,然后再翻页,排序的顺序就乱了啊
wangsaokui 2004-03-20
  • 打赏
  • 举报
回复
是什么不能用了?
soft2000 2004-03-20
  • 打赏
  • 举报
回复
有人回答吗?
soft2000 2004-03-20
  • 打赏
  • 举报
回复
Private Sub DataGrid1_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.DeleteCommand
Dim id As Integer = CInt(e.Item.Cells(3).Text)
Dim delsql As String = "delete from zdfw where id=" & CStr(id)
If id <> 0 Then
If deleterow(delsql) = 0 Then
getdataset()
DataGrid1.EditItemIndex = -1
Page.DataBind()
End If
End If

'==============下面的代码是删除DS中的数据,但是没有立即提交到数据库中=========
'Const prk_id As Integer = 0
'Dim dt As DataTable = ds.Tables("zlfw")
'Dim pk(1) As DataColumn
'pk(0) = dt.Columns(prk_id)
'dt.PrimaryKey = pk
'Dim dr As DataRow = dt.Rows.Find(id)
'If Not dr Is Nothing Then
'dr.Delete()
'Dim dschange As DataSet = ds.GetChanges()
'Dim cb As New OleDb.OleDbCommandBuilder(da)
'If Not dschange Is Nothing Then
'da.Update(dschange, "zlfw")
'Response.Write("dfdfd")
'End If
'End If
'Page.DataBind()
'===================================结束========================================
End Sub

Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
Dim id1 As String = Trim(CType(e.Item.Cells(3).Controls(0), TextBox).Text)
Dim sfzh As String = Trim(CType(e.Item.Cells(4).Controls(0), TextBox).Text)
Dim xm As String = Trim(CType(e.Item.Cells(5).Controls(0), TextBox).Text)
Dim xb As String = Trim(CType(e.Item.Cells(6).Controls(0), TextBox).Text)
Dim fwcs As String = Trim(CType(e.Item.Cells(7).Controls(0), TextBox).Text)
Dim zz As String = Trim(CType(e.Item.Cells(8).Controls(0), TextBox).Text)
Dim czfwdz As String = Trim(CType(e.Item.Cells(9).Controls(0), TextBox).Text)
Dim lxdh As String = Trim(CType(e.Item.Cells(10).Controls(0), TextBox).Text)
Dim fjs As String = Trim(CType(e.Item.Cells(11).Controls(0), TextBox).Text)
Dim jwq As String = Trim(CType(e.Item.Cells(12).Controls(0), TextBox).Text)
Dim updatesql As String = "update zdfw set sfzh='" & sfzh & "',xm='" & xm & "',xb='" & xb & "',fwcs='" & fwcs & "',zz='" & zz & "',czfwdz='" & czfwdz & "',lxdh='" & lxdh & "',fjs='" & fjs & "',jwq='" & jwq & "' where id =" & id1
Response.Write(updatesql)
If updaterow(updatesql) = 0 Then
getdataset()
DataGrid1.EditItemIndex = -1
Page.DataBind()
End If
End Sub

Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
DataGrid1.CurrentPageIndex = e.NewPageIndex
getdataset()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ds As DataSet = getdataset()
Dim dt As DataTable = ds.Tables("zlfw")
Dim dv As DataView = New DataView(dt)
dv.RowFilter = "姓名 like '张%'"
DataGrid1.DataSource = dv
DataGrid1.DataBind()
End Sub
End Class

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧