2011-03-18 17 views
20

मेरे पास एक ग्रिडव्यू और सक्षम सॉर्टिंग है। एप्लिकेशन चलाते समय मैं क्रमबद्ध करने के लिए पहले कॉलम पर क्लिक करता हूं। और मुझे यह त्रुटि मिलती है: "ग्रिड व्यू 'gvOutlookMeldingen' निकाल दिया घटना छंटनी जो संभाला नहीं गया था।"ग्रिडव्यू को सॉर्ट करने की अनुमति कैसे दें?

यह gridview है:

<asp:GridView ID="gvOutlookMeldingen" runat="server" AllowSorting="True" AutoGenerateColumns="False" AutoGenerateSelectButton="True" onselectedindexchanged="GridView_SelectedIndexChanged"> 
    <Columns> 
     <asp:TemplateField HeaderText="Melder" ItemStyle-HorizontalAlign="Center" SortExpression="Melder"> 
      <HeaderStyle BorderColor="#1A3491" Width="130px"></HeaderStyle> 
      <ItemStyle Height="20px" HorizontalAlign="Center"></ItemStyle> 
      <ItemTemplate> 
       <%# (string)Eval("Melder") %> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" /> 
     <asp:TemplateField HeaderText="Omschrijving"> 
      <ItemTemplate> 
       <div style="overflow:auto; width: 500px; height: 200px;"> 
        <asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label> 
       </div> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" /> 
     <asp:BoundField DataField="OutlookID" HeaderText="OutlookID" /> 
    </Columns> 
</asp:GridView> 

किसी भी मदद

+0

जैसा कि नीचे बताया गया है, मैं लिंक को एसक्यूएल में देखने का सुझाव दे सकता हूं। ऐसा लगता है कि इस तालिका को एसक्यूएल का उपयोग करके पॉप्युलेट किया गया है। लिंक से एसक्यूएल के साथ यह चीजों को सॉर्ट करने के लिए थोड़ा आसान बनाता है – Neale

+0

एक बेहतर तरीका http://stackoverflow.com/questions/3966835/sorting-gridview – Sami

उत्तर

22

आप SortExpression के BoundField में अन्य उत्तरों में उल्लिखित हैं।

आप TemplateField का भी उपयोग कर रहे हैं, जो आपके डेटा को उत्पन्न करने के आधार पर, SortExpression के उपयोग से मैन्युअल सॉर्टिंग की आवश्यकता हो सकती है।

यदि यह मामला है, तो मैन्युअल रूप से सॉर्ट करने के लिए, एक विधि अपने खेतों और एक पद्धति के लिए GridView, SortExpression के लिए एक OnSorting कॉलबैक जोड़ने के लिए अपने में कालबैक में कोड-पीछे है।

यह मार्कअप और (untested) के समान कोड में परिणाम होगा:

<asp:GridView ID="gvOutlookMeldingen" runat="server" 
    AllowSorting="True" 
    OnSorting="gvOutlookMeldingen_Sorting" 
    AutoGenerateColumns="False" 
    AutoGenerateSelectButton="True" 
    onselectedindexchanged="GridView_SelectedIndexChanged"> 
    <Columns> 
     <asp:BoundField DataField="Melder" HeaderText="Melder" SortExpression="Melder" /> 
     <asp:BoundField DataField="Onderwerp" HeaderText="Onderwerp" SortExpression="Onderwerp" /> 
      <asp:TemplateField HeaderText="Omschrijving" SortExpression="Omschrijving"> 
       <ItemTemplate> 
        <div style="overflow:auto; width: 500px; height: 200px;"> 
         <asp:Label ID="lblOmschrijving" runat="server" Text='<%# Bind("Omschrijving")%>'></asp:Label> 
        </div> 
       </ItemTemplate> 
      </asp:TemplateField> 
     <asp:BoundField DataField="Meldingsdatum" HeaderText="Meldingsdatum" SortExpression="Meldingsdatum" /> 
     <asp:BoundField DataField="OutlookID" HeaderText="OutlookID" SortExpression="OutlookID" /> 
    </Columns> 
</asp:GridView> 

... और:

protected void gvOutlookMeldingen_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    switch (e.SortExpression) 
    { 
     case "Melder": 
     if (e.SortDirection == SortDirection.Ascending) 
     { 
      gvOutlookMeldingen.DataSource = // Asc query for Melder field; 
      gvOutlookMeldingen.DataBind(); 
     } 
     else 
     { 
      gvOutlookMeldingen.DataSource = // Desc query for Melder field ; 
      gvOutlookMeldingen.DataBind(); 
     } 
     break; 
     // case statements for your other fields. 
    } 
} 
+0

की मदद से भरता हूं जो डाटासॉर के बारे में मैं डेटाटेबल का उपयोग करता हूं। तो मुझे उस डेटाटेबल को भी सॉर्ट करना होगा? क्या आप जानते हैं कैसे? – SamekaTV

+0

ऐसा करने के कुछ तरीके हैं, मैं आम तौर पर आदत से लिंक का उपयोग करता हूं। इसके लिए यहां एक अच्छा SO उत्तर है: http://stackoverflow.com/questions/10855/linq-query-on-a-datatable – Kynth

+0

यदि मैं डेटासोर्स के लिए किसी फ़ोल्डर से फ़ाइलों का उपयोग कर रहा हूं, तो मैं कैसे प्राप्त कर पाऊंगा उस? http://stackoverflow.com/questions/24491778/how-to-allow-sorting-in-gridview – SearchForKnowledge

3

सराहना की मैं अपने ग्रिड दृश्य का डेटा स्रोत मान एक DataTable तो मुझे लगता है आप में जोड़ने के लिए

SortExpression="column name" 

है प्रत्येक एएसपी: बाउंडफील्ड जिसे आप सॉर्ट करने में सक्षम होना चाहते हैं,

उदाहरण के लिए

<asp:BoundField DataField="Melder" SortExpression="Melder" HeaderText="Melder" /> 
+0

मैंने सवाल अपडेट किया है, मैंने जो कहा है मैंने किया है लेकिन मुझे अभी भी मिलता है त्रुटि। -> "ग्रिड व्यू 'gvOutlookMeldingen' निकाल दिया घटना छंटनी जो संभाला नहीं गया था।" – SamekaTV

+0

ग्रिडव्यू का डेटासोर्स क्या यह एक सामान्य सूची है <>, एक डाटाटेबल? – bAN

+0

यह एक डाटाटेबल है और मेरे पास एक और ग्रिडव्यू है जिसे मैं एसक्यूएल – SamekaTV

5

आपको उन कॉलमों की SortExpression विशेषता सेट करने की आवश्यकता है, जिन्हें आप सॉर्ट करना चाहते हैं। और आपको अपने डेटासोर्स पर सॉर्ट काम करने के लिए Sorting ईवेंट में इवेंट हैंडलर जोड़ने की आवश्यकता है।

अधिक जानकारी के लिए, this MSDN article, या this example with sorting and paging देखें।

8

इस कोड (तुम लोग इस पुराने पोस्ट googling के लिए) मदद कर सकता है:

protected void gvOutlookMeldingen_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    DataTable dt = (DataTable)Session["mySessionStoredTable"]; 
    dt.DefaultView.Sort = e.SortExpression // column name 
     + " " + SortDir(e.SortExpression); // sort direction 
    gv.DataSource = dt; 
    gv.DataBind(); 
} 

private string SortDir(string sColumn) 
{ 
    string sDir = "asc"; // ascending by default 
    string sPreviousColumnSorted = ViewState["SortColumn"] != null 
     ? ViewState["SortColumn"].ToString() 
     : ""; 

    if (sPreviousColumnSorted == sColumn) // same column clicked? revert sort direction 
     sDir = ViewState["SortDir"].ToString() == "asc" 
      ? "desc" 
      : "asc"; 
    else 
     ViewState["SortColumn"] = sColumn; // store current column clicked 

    ViewState["SortDir"] = sDir; // store current direction 

    return sDir; 
} 
+0

बहुत उपयोगी।Thnx – SamekaTV

+0

रास्ता बहुत भ्रमित –

+0

@ क्रिस्टोफर ब्रूस जो कि वेब के लिए वेबफॉर्म है – drzaus

संबंधित मुद्दे

 संबंधित मुद्दे