277 messaggi dal 03 ottobre 2006
Ho una gridview fatta così in asp.net 4.5
<asp:GridView ID="GVPlanning" runat="server" AllowPaging="true" AllowSorting="true"
PageSize="20" DataKeyNames="BarcaID" AutoGenerateColumns="False" SelectMethod="GetBarchePlanning" ShowHeader="false" ItemType="SkipperClub.Models.BarcaxeventoDTO">

Il SelectMethod restituisce un IQueryable fatto così:
public IQueryable<BarcaxeventoDTO> GetBarchePlanning()
{
BarcheActions ba = new BarcheActions();
return ba.GetBarchePlanningDTO(Cal.curregione.ToString());
}

public IQueryable<BarcaxeventoDTO> GetBarchePlanningDTO(string regio)
{
return query.OrderByDescending(p => p.Occupata).AsQueryable();
}

La query finale produce in effetti un elenco ordinato secondo la proprietà "Occupata" ma nella gridview l'ordinamento NON viene eseguito. (se io mostrassi l'header della gridview e usassi le intestazioni di colonna l'ordinamento lo fa, ma io vorrei che facesse l'ordinamento che voglio io e che l'utente non lo cambi)

Restituendo un IList invece di IQueryable viene generato un errore relativo al fatto che quando è attivata la paginazione è necessario che la select abbia obbligatoriamente i parametri startRowIndex, maximumRows, totalRowCount ma anche aggiungendo questo sul finale della query l'errore non sparisce

totalRowCount = query.Count();
return query.Skip(startRowIndex).Take(maximumRows).OrderByDescending(p => p.Occupata).AsQueryable()
333 messaggi dal 05 novembre 2012
Ciao,

è da molto che non lavoro su webform ma fai una prova temporanea, metti AllowSorting della gridview a false...l'ordinamento è quello desiderato?

Ho il presentimento che in qualche modo la proprietà SortExpression della gridview sovrascrive il tuo ordinamento ed il modo corretto sia di impostare l'ordinamento di partenza tramite la proprietà.

UPDATE: Guarda qui

/Ciao
Modificato da scioCoder il 14 marzo 2019 15:09 -

Alessio
277 messaggi dal 03 ottobre 2006
grazie, in realtà solo mettendo a false allowsorting nel gridview l'elenco non viene ancora ordinato.
Nel link del tuo aggiornamento non riesco a capire cosa propongono come soluzione.
Temendo il problema sia nel fatto che restituisco un IQuerable, ho provato a convertire la funzione restituendo un IEnumerable chiamando .ToList() così:

public IEnumerable<BarcaxeventoDTO> GetBarchePlanningDTO(string regio, int startRowIndex,int maximumRows, out int totalRowCount)

....

totalRowCount = query.Count();
return query.Skip(startRowIndex).Take(maximumRows).OrderByDescending(p => p.Occupata).ToList()

ma restituisce misteriosamente l'errore qui sotto... eppure io quei parametri li uso...

When the DataBoundControl has paging enabled, either the SelectMethod should return an IQueryable<ItemType> or should have all these mandatory parameters : int startRowIndex, int maximumRows, out int totalRowCount
333 messaggi dal 05 novembre 2012
Ciao,

ritorna al tuo stato iniziale...quindi

AllowSorting = true

Dal tuo metodo code behind restituisci un IQueryable e levi OrderByDescending

Nel page_load metti

if (!IsPostBack)
{
   // Set default sort expression
   GVPlanning.Sort("Occupata", SortDirection.Descending);
}

Alessio
277 messaggi dal 03 ottobre 2006
a volte i miracoli avvengono...
così funziona
grazie mille

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.