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

解决方案 »

  1.   

    比较好的方法是你得记住每一次排序的SortExpression
    如果翻页,你得恢复这个SORTEXPRESSION
      

  2.   

    因为翻页要重新databind,所以你排序先建个dataview(每次排序的dataview数据都不同),再databind和翻页,这时databind的是你的新的dataview(你排序后的)。
      

  3.   

    给你一个例子:刚刚做的,调试成功了。
    <%@ 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>
      

  4.   

    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 
    }
    }