2012-10-03 32 views
5

मैं वर्तमान में कुछ कोड पर काम कर रहा हूं जो ग्रिडव्यू में सॉर्टिंग और पेजिंग डेटा की देखभाल कर रहा है। अब मैं सॉर्टिंग तीर (कॉलम हेडर के बगल में ऊपर/नीचे तीर) को लागू करने की कोशिश कर रहा हूं लेकिन मुझे कोई सफलता नहीं है। सॉर्टिंग तीरों को लागू करने के लिए कोड * GridView1_RowCreated * उप दिनचर्या में स्थित है। अभी, जब मैं कोड चलाता हूं, तो मुझे सॉर्टिंग तीरों को बिल्कुल नहीं दिखता है। समस्याग्रस्त रेखा निम्न है: "यदि tblAdministrators.SortExpression = lnk.CommandArgument तब" मैं यह नहीं समझ सकता कि उस रेखा के साथ क्या गलत है। यह हमेशा झूठा है इसलिए तीर दिखाई नहीं देते हैं।कॉलम हेडर में ग्रिडव्यू सॉर्टिंग ऊपर/नीचे तीर

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 कोड: 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> 

वेतन ध्यान:

<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

मेरी नमूना पर एक नजर डालें। बस पृष्ठभूमि छवि (तीर ऊपर और तीर नीचे) के साथ अनुचित सीएसएस वर्ग बनाएँ और आप कर रहे हैं। चयन ग्रिड आप कर रहे हैं -

+0

ग्रेगर संभालती है। यह केवल SQLDataSource का उपयोग करते समय काम करेगा जो मेरा मामला नहीं है। यह वास्तव में बहुत अच्छा होगा अगर यह काम करेगा क्योंकि इसे कार्यान्वित करना इतना आसान है। –

+0

यह सिर्फ नमूना डेटासोर्स है। इसे किसी भी अन्य डेटासोर्स प्रकार पर भी काम करना चाहिए। –

+0

उन कार्यों का उपयोग करने के लिए "डेटासोर्सिड" अनिवार्य है (SortedAscendingHeaderStyle आदि ...) मेरे कोड में, मैं डेटा स्रोत नियंत्रण का उपयोग नहीं कर रहा हूं लेकिन मैं मैन्युअल डाटाबेसिंग कर रहा हूं। –

0

एक VB.net विंडोज फार्म पर एक डाटा ग्रिड में एक छँटाई तीर जोड़ने के लिए आदेश में, आप भी किसी भी कोड

  1. डिजाइन मोड में प्रपत्र पर लिखने के लिए नहीं है साथ काम करना, गुणों पर राइट क्लिक करें, चयन मोड सेट करें = सेल का चयन करें
  2. डिज़ाइन मोड में फॉर्म पर - दाएं किनारों पर तीर पर क्लिक करें, कॉलम गुणों को संपादित करने के लिए, संपादित करें या कॉलम जोड़ें, SortMode = स्वचालित सेट करें
  3. यदि आपके पास अपनी सेल सामग्री के लिए कोड है (कहें कि आप डेटा ग्रिड में किसी भी पंक्ति पर क्लिक करते समय उपयोगकर्ता को एक और फॉर्म खोलना चाहते हैं) तो सेलडबल का उपयोग करें घटना को संभालने के लिए संपत्ति पर क्लिक करें। आप एक क्लिक का इस्तेमाल किया है, तो यह शीर्ष लेख को सॉर्ट और भी

निजी उप _CellDoubleClick (इस वस्तु, ई DataGridViewCellEventArgs के रूप में के रूप में) किसी सेल के लिए फॉर्म को खोलने के DGAcctGrpList.CellDoubleClick