сортировка по сетке на основе столбцов - PullRequest
0 голосов
/ 09 октября 2009

Привет, у меня есть вид сетки в этом я показываю несколько столбцов с именем, телефоном, информацией и датой. Мое требование: если я нажму на заголовок столбца, то он должен быть отсортирован, мой код aspx здесь ...

<asp:GridView ID="sorttest" runat="server" AllowSorting="true">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="Sno." Visible="False" />
        <asp:BoundField DataField="Name" HeaderStyle-CssClass="tdHead3" HeaderText="Name" SortExpression="Name" />
        <asp:BoundField DataField="Phone" HeaderStyle-CssClass="tdHead3" HeaderText="Phone Number" SortExpression="Phone"/>
        <asp:BoundField DataField="Information" HeaderStyle-CssClass="tdHead3" HeaderText="Information Of The Offender" SortExpression="Information"/>
        <asp:BoundField DataField="Date" HeaderStyle-CssClass="tdHead3" HeaderText="Date of Graffiti" SortExpression="Date"/>
    </Columns>
</asp:GridView>

и мой код:

Public Sub FillGrid()
    Try
        myconnection = New SqlConnection(conntection string)
        cmd = New SqlCommand()
        cmd.CommandText = "Retrievedetails"
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Connection = myconnection
        ds = New DataSet()
        da = New SqlDataAdapter(cmd)
        da.Fill(ds, "details")
        myconnection.Open()
        sorttest.DataSource = ds
        sorttest.DataBind()
    Catch ex As Exception
    Finally
        myconnection.Close()
    End Try
End Sub

для этого, если я нажму на заголовок столбца, он должен сначала отсортироваться в порядке возрастания, если я щелкну в следующий раз, тогда он должен быть отсортирован в порядке убывания, он будет применяться ко всем столбцам, перечисленным в виде сетки ...

Пожалуйста, помогите мне в кодировании для этого ...

Ответы [ 2 ]

1 голос
/ 09 октября 2009

Это код в vb.net. Вам нужно обработать событие Sorting для GridView, а также поддерживать состояние просмотра для предыдущей сортировки.

Private Property PreviousSortField() As String
    Get
        If ViewState("SortField") Is Nothing Then
            Return ""
        Else
            Return ViewState("SortField")
        End If
    End Get
    Set(ByVal value As String)
        ViewState("SortField") = value
    End Set
End Property

Private Property PreviousSortDirection() As String
    Get
        If ViewState("SortDirection") Is Nothing Then
            Return ""
        Else
            Return ViewState("SortDirection")
        End If
    End Get
    Set(ByVal value As String)
        ViewState("SortDirection") = value
    End Set
End Property

Protected Sub sorttest_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles sorttest.Sorting
    Dim SortDirection As String
    If e.SortDirection = WebControls.SortDirection.Ascending Then
        SortDirection = "DESC"
    ElseIf e.SortDirection = WebControls.SortDirection.Descending Then
        SortDirection = "ASC"
    Else
        SortDirection = "ASC"
    End If
    Dim ds As DataSet = sender.Datasource
    Dim Data As DataTable = ds.Tables(0)
    If Not Data Is Nothing Then
        Dim dv As DataView = New DataView(Data)
        If e.SortExpression = PreviousSortField And SortDirection = PreviousSortDirection Then
            If SortDirection.ToUpper = "ASC" Then
                SortDirection = "DESC"
            ElseIf SortDirection.ToUpper = "DESC" Then
                SortDirection = "ASC"
            Else
                SortDirection = "ASC"
            End If
        End If
        dv.Sort = e.SortExpression & " " & SortDirection
        sender.DataSource = dv
        sender.DataBind()
    End If

    'Need to store sort info in view state
    PreviousSortField = e.SortExpression
    PreviousSortDirection = SortDirection
End Sub
1 голос
/ 09 октября 2009

Вам нужно обработать OnSorting событие, вот как я это делаю:

ASPX:

 <asp:GridView ID="sorttest" runat="server" AllowSorting="true"
    OnSorting="SortGrid">

CodeBehind:

//sorry I'm putting my CS code, as translating it to VB will be 
//very tedious for me
protected void SortGrid(object sender, GridViewSortEventArgs e)
{
    ViewState["SortDirection"] = 
          (e.SortDirection == SortDirection.Ascending) ? "asc": "desc";

    ViewState["SortExp"] = e.SortExpression;

    FillGrid();//CALL FILL GRID
}

теперь в FillGrid вам нужно отсортировать таблицу (детали), которую вы получаете, на основе этих значений:

    'Here sort the table (details) based on values stored in View State
    'Sorry My VB skills are really rusty now :)

    var dv as DataView = ds.Tables("details").DefaultView;

    if not (ViewState("SortExp") is nothing) then 'check for null
        if ViewState("SortDirection").ToString() == "asc" then
            dv.Sort = ViewState("SortExp") & " " & "asc"
        else
            dv.Sort = ViewState("SortExp") & " " & "desc"
        end if
    end if

    sorttest.DataSource = dv 'bind to dataview
    sorttest.DataBind()
...