2012-10-03 7 views
5

現在、グリッドビューで並べ替えやページングデータを扱ういくつかのコードに取り組んでいます。私は今、並べ替えの矢印(列ヘッダーの横にある上下の矢印)を実装しようとしていますが、私は成功していません。ソート矢印を実装するコードは、* GridView1_RowCreated *サブルーチンにあります。今、コードを実行すると、ソート矢印は表示されません。問題のある行は次のような行です: "If tblAdministrators.SortExpression = lnk.CommandArgument Then"その行に何が間違っているのかわかりません。常になので、矢印は表示されません。グリッドビューで列見出しの上下の矢印を並べ替える

Private Function GetData(sort As SortDirection) As Data.DataView 

    Dim connection As OracleDBConnect = DAL.GetOracleDBConnection() 
    Dim request As OracleDBRequest = Nothing 
    Dim result As OracleDBResult = Nothing 
    Dim trace As OracleDBChronoTrace = Nothing 
    Dim status As DBStatus 
    Dim sb As New StringBuilder 
    Dim dv As DataView 

    With sb 
     .Append("SELECT * FROM USERS") 
    End With 

    request = New OracleDBRequest(sb.ToString, CommandType.Text) 

    status = connection.Execute(request, result, trace) 

    dv = New DataView(result.DataSet.Tables(0)) 

    If (ViewState("sortExp") IsNot Nothing) Then 
     dv = New Data.DataView(result.DataSet.Tables(0)) 

     If (GridViewSortDirection = SortDirection.Ascending) Then 
      GridViewSortDirection = SortDirection.Descending 
      dv.Sort = CType(ViewState("sortExp").ToString() & DESCENDING, String) 
     Else 
      GridViewSortDirection = SortDirection.Ascending 
      dv.Sort = CType(ViewState("sortExp").ToString() & ASCENDING, String) 
     End If 
    Else 
     dv = result.DataSet.Tables(0).DefaultView 
    End If 

    Return dv 

End Function 


Public Property GridViewSortDirection() As SortDirection 
    Get 
     If ViewState("sortDir") Is Nothing Then 
      ViewState("sortDir") = SortDirection.Ascending 
     End If 

     Return CType(ViewState("sortDir"), SortDirection) 
    End Get 

    Set(ByVal value As SortDirection) 
     ViewState("sortDir") = value 
    End Set 

End Property 


Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles tblAdministrators.PageIndexChanging 

    tblAdministrators.PageIndex = e.NewPageIndex 
    GridViewSortDirection = If(GridViewSortDirection = SortDirection.Descending, SortDirection.Ascending, SortDirection.Descending) 
    tblAdministrators.DataSource = GetData(GridViewSortDirection) 
    tblAdministrators.DataBind() 

End Sub 


Protected Sub GridView1_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles tblAdministrators.Sorting 

    ViewState("sortExp") = e.SortExpression 
    tblAdministrators.DataSource = GetData(GridViewSortDirection) 
    tblAdministrators.DataBind() 

End Sub 

Protected Sub GridView1_RowCreated(sender As Object, e As GridViewRowEventArgs) Handles tblAdministrators.RowCreated 
    If e.Row.RowType = DataControlRowType.Header Then 
     For Each tc As TableCell In e.Row.Cells 
      If tc.HasControls() Then 

       Dim lnk As LinkButton = DirectCast(tc.Controls(0), LinkButton) 
       If lnk IsNot Nothing Then 

        Dim img As New System.Web.UI.WebControls.Image() 

        img.ImageUrl = "/images/" & (If(GridViewSortDirection = SortDirection.Ascending, "asc", "desc")) & ".gif" 

        If tblAdministrators.SortExpression = lnk.CommandArgument Then 

         tc.Controls.Add(New LiteralControl(" ")) 
         tc.Controls.Add(img) 

        End If 
       End If 
      End If 
     Next 
    End If 
End Sub 

ASPXコード:

<asp:GridView ID="tblAdministrators" runat="server" AutoGenerateColumns="false" EmptyDataText="No records found" PageSize="25" AllowPaging="True" AllowSorting="True" OnRowCreated="GridView1_RowCreated"> 
     <Columns> 
      <asp:BoundField HeaderText="Name" DataField="Name" SortExpression="NAME"></asp:BoundField> 
     </Columns> 
     <Columns> 
      <asp:BoundField HeaderText="City" DataField="City" SortExpression="CITY"></asp:BoundField> 
     </Columns> 
    </asp:GridView> 

答えて

4

は私のサンプルを見てみましょう:SortedAscendingHeaderStyleとSortedDescendingHeaderStyle上

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="CustomerId" 
    DataSourceID="SqlDataSource1"> 
    <SortedAscendingHeaderStyle CssClass="sortasc" /> 
    <SortedDescendingHeaderStyle CssClass="sortdesc" /> 
    <Columns> 
     <asp:CommandField ShowSelectButton="True" /> 
     <asp:BoundField DataField="CustomerId" HeaderText="CustomerId" 
      InsertVisible="False" ReadOnly="True" SortExpression="CustomerId" /> 
     <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
     <asp:BoundField DataField="IdNumber" HeaderText="IdNumber" 
      SortExpression="IdNumber" /> 
    </Columns> 
</asp:GridView> 

ご注意を。単に背景画像(上向き矢印と下向き矢印)を持つ適切なCSSクラスを作成すれば、完了です。

+0

グレゴールを処理します。これは私の場合ではないSQLDataSourceを使用する場合にのみ機能します。実装が簡単なので実用的であれば本当に素晴らしいでしょう。 –

+0

これは単なるサンプルデータソースです。他のデータソースタイプでも動作するはずです。 –

+0

"DataSourceID"は、これらの関数(SortedAscendingHeaderStyleなど)を使用するために必須です。私のコードでは、データソースコントロールを使用していませんが、私はむしろマニュアルデータバインディングを行っています。 –

0

VB.net Windowsフォーム上のデータグリッドでソート矢印を追加するために、あなたも、デザインモードでフォーム上の任意のコード

  1. を記述する必要はありません - あなたは、グリッドを選択しますデザインモードでフォーム上で - 右上の矢印をクリックして列のプロパティを編集し、列の編集または追加を選択し、SortMode = Automaticを設定します。
  2. セルコンテンツのコードがある場合(たとえば、データグリッド内の任意の行をクリックしながら別のフォームを開くようにしたい場合)、CellDoubleを使用しますプロパティをクリックしてイベントを処理します。あなたはシングルクリックを使用している場合、それは

をヘッダをソートしても、与えられたセルのためのフォームが開きますプライベートサブ_CellDoubleClick(DataGridViewCellEventArgsなどのオブジェクト、Eのような送信者は)DGAcctGrpList.CellDoubleClick

関連する問題