|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
[.net]Databinding->Datagridview->GroupBy
salve
![]() ho la tipica situazione in cui: Codice:
private void BindGrid(int objID)
{
BindingSource bs = new BindingSource();
bs.DataSource = myView.GetDetail(objID);
myGrid.DataSource = bs;
}
private void SomeWhereInTheBlueCode()
{
BindGrid(11);
}
Ora, avrei bisogno di fare in modo che in base ad un'azione da parte dell'utente, a questa griglia io possa aggiungere dei dati e raggrupparli, cioè: se l'utente aggiunge "caramella rossa" e nella griglia già è presente un'articolo "caramella rossa" anzichè aggiungere una riga me ne sommi le quantità, ovvero: caramella rossa -> 2 che mi aumenti quindi, soltanto le quantità. E questa sarebbe la mia prima vista.... Successivamente dovrei poi essere in grado anche invece di "separarle" e quindi di vedere per ciascun dato, la singola quantità. Per la singola quantità ovviamente non ho problemi. Sono sempre su EF e ho libertà di scelta fra linq to sql e linq to entity. Grasiiasisiaisiiaassse !!
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Dopo un pò di arzigogolamenti ed un aiuto da msdn sono giunto qui:
Codice:
public IQueryable ViewArticoliGrouped(int orderID)
{
var result = from order in context.Orders
join sellers in context.Sellers on order.id_order equals sellers.orderID
join articles in context.Articles on order.id_order equals articles.orderID
where order.id_order == orderID
group articles by articles.ArticoliTop.descrizione into TEST_GROUP
let unitPrice = TEST_GROUP.FirstOrDefault().prezzo
let qty = TEST_GROUP.Sum(s => s.quantita)
let priority = TEST_GROUP.FirstOrDefault().portata
let send = TEST_GROUP.FirstOrDefault().inviata
let idr = TEST.FirstOrDefault().id_articolo
select new
{
seller = TEST_GROUP.FirstOrDefault().Orders.Sellers.FirstOrDefault().denominazione,
prodotto = TEST_GROUP.Key,
prezzo = unitPrice * qty,
quantity = qty,
priority = priority,
inviato = send,
idr = idr
};
return result;
}
1) è lentissima 2) volendo 'tradurla' in linq to entity, mi dareste una mano ? Raoul....
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
Ultima modifica di RaouL_BennetH : 22-09-2012 alle 07:17. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
il problema sono tutti quei FirstOrDefault()
Codice:
seller = TEST_GROUP.FirstOrDefault().Orders.Sellers.FirstOrDefault().denominazione invece di fare una singola query L2Sql, perché non fai diverse query, metti il risultato in collezioni che ti possono aiutare e poi combini il tutto in L2Objects? se proprio non riesci a decomporre efficientemente la query, prova ad aiutarti con delle view fatte ad hoc sul database. per quanto lo si voglia far credere, utilizzarle in un ORM non é una bestemmia * in realtá con il giusto set di trigger puoi scrivere anche in una view Ultima modifica di Kralizek : 20-09-2012 alle 11:40. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Per quanto riguarda le view, a me sembrava la via più semplice ma non posso agire sul database e ad una piccola richiesta da parte mia hanno storto il naso. Mille grazie
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Allora... Ho provato a riprodurmi su un db in locale le tabelle e crearmi una vista.
E' tremendamente più veloce. Ad ogni modo ho comunque due problemi: 1) Non potrò mai usarla perchè non ne ho l'autorizzazione 2) Ci sono dei dati che vorrei capire come visualizzare: Codice:
Tabella Ordini: id_ordine pk altreInfoPocoUtili... TabellaAssegnazioneVenditori id_assignment pk regioneID (fk -> pk tabella regioni (id_regione)) ordineID (fk -> pk tabella ordini (id_ordine)) TabellaArticoliVenduti id_vendita pk articoloID (fk -> pk tabella articoli(id_articolo)) ordineID (fk -> pk tabella ordini(id_ordine)) qta (intero) prezzo(decimal) priority (intero) evaso (bit) La regione o l'id della stessa (dato che non dev'essere raggruppata) la priorità (anch'essa non ha un raggruppamento) e lo stato dell'articolo (se è stato evaso o meno) In pratica: Codice:
SELECT dbo.ArticoliVenduti.articoloID, dbo.Ordini.id_ordine AS pID, SUM(dbo.ArticoliVenduti.quantita) AS Qta,
SUM(dbo.ArticoliVenduti.prezzo * dbo.ArticoliVenduti.quantita) AS price
FROM dbo.ArticoliVenduti INNER JOIN
dbo.Ordini ON dbo.ArticoliVenduti.orderID = dbo.Ordini.id_ordine INNER JOIN
dbo.AssegnazioneVenditori ON dbo.Ordini.id_ordine = dbo.AssegnazioneVenditori.ordineID
GROUP BY dbo.Ordini.id_ordine, dbo.ArticoliVenduti.articoloID
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
|
potrebbe sfuggirmi qualcosa, ma non capisco il problema
la query è corretta, devi solo aggiungere regione, stato e priorità e raggruppare cmq per gli stessi poichè non sono usati dalla funzione di aggregazione. Diversamente, non ho capito cosa vuoi ottenere |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:32.





















