2011-03-18 10 views
20

Tengo una vista en cuadrícula y habilitado la clasificación. Al ejecutar la aplicación, hago clic en la primera columna para ordenar. Y obtengo este error: "El evento disparado GridView 'gvOutlookMeldingen' que no se manejó."¿Cómo permitir la clasificación de una vista de cuadrícula?

Este es el 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> 

Cualquier ayuda se agradece

+0

como se indica a continuación, puedo sugerir que busques en Linq a SQL. Parece que esta tabla se completa con sql. Con Linq a SQL hace que esto sea un poco más fácil para ordenar las cosas. – Neale

+0

Una mejor manera es http://stackoverflow.com/questions/3966835/sorting-gridview – Sami

Respuesta

22

Te has perdido SortExpression en tu BoundField como se menciona en las otras respuestas.

También está utilizando un TemplateField que, dependiendo de qué genere sus datos, puede requerir una clasificación manual más allá del uso de SortExpression.

Si este es el caso, entonces para ordenar manualmente, un método consiste en añadir una devolución de llamada OnSorting a los GridView, SortExpression 's a sus campos y un método de devolución de llamada en el código subyacente.

Esto resultaría en el marcado y el código similar a (no probado):

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

... y:

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

qué pasa con el origen de datos que uso una tabla de datos. ¿Entonces también tengo que ordenar esa tabla de datos? ¿sabes cómo? – SamekaTV

+0

Hay algunas maneras de hacerlo, generalmente uso Linq por costumbre. Hay una buena respuesta SO para eso aquí: http://stackoverflow.com/questions/10855/linq-query-on-a-datatable – Kynth

+0

¿Qué sucede si estoy usando archivos de una carpeta para DataSource, cómo podría lograrlo? ¿ese? http://stackoverflow.com/questions/24491778/how-to-allow-sorting-in-gridview – SearchForKnowledge

3

Asumo la fuente de datos de la vista de cuadrícula es un DataTable así que creo que hay que añadir

SortExpression="column name" 

en cada asp: Boundfield que le guste poder ordenar,

por ejemplo

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

He actualizado la pregunta, hice lo que me dijo, pero sigo teniendo el error. -> "El evento disparado GridView 'gvOutlookMeldingen' que no se manejó." – SamekaTV

+0

¿Cuál es el origen de datos de gridview es una lista genérica <>, una tabla de datos? – bAN

+0

es una tabla de datos y tengo otra vista de cuadrícula que llené con la ayuda de SQL – SamekaTV

8

Este código podría ayudar (para ustedes googlear este viejo post):

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

Muy útil.Thnx – SamekaTV

+0

demasiado confuso –

+0

@ChristopherBruce eso es webforms para ti – drzaus

Cuestiones relacionadas