Sa zicem ca avem vinzarile de produse pe clienti.
Se cere ca sa se afiseze grafic produsele si clientii astfel incit :
1. sa se vada toate produsele si clientii
2. Daca se da click pe un client, sa se filtreze produsele dupa clientul respectiv
3. daca se click pe >= 2 clienti (cu shift), sa se filtreze produsele dupa produsele comune (intersectia)
La fel pentru produse.
Ce ma sfatuiti ? Caci nu prea stiu de unde s-o apuc pe calea grafica/ cod...
Ignat Andreihttp://serviciipeweb.ro/iafblog
Depinde de ce are nevoie clientul, deci ce se intelege prin "afiseze grafic"...O varianta ar fi doua grid-uri, unul cu produsele, altul cu clientii, asezate pe verticala sau orizontala..Fiecare grid ar fi astfel "master' dar si "details" pentru celalalt..
Prin afiseze grafic inteleg chiar asta: grafica(ASP,Winforms,WPF, orice)
Dar... cum rezolv cu codul ? Ce ar trebui sa fac? Sa zicem ca selecteaza 10 clienti ...
Nu prea inteleg unde e problema - de fiecare data cand selecteaza un client, re-filtrezi lista de produse (prespunand ca lista e deja adusa in memorie)..Daca e vorba de mii de produse, care nu le poti tine toate in memorie, intr-adevar pot aparea probleme de performanta daca la fiecare selectare de client cu Ctrl-Click trebuie sa mergi in baza de date si sa aduci din nou produsele..
Problema ar fi ca nu stii cand termina utilizatorul selectia? Daca asta e ai putea sa folosesti un delay si sa incepi afisarea produselor daca au trecut cateva milisecunde de cand a dat el ultimul click ca sa-i dai posibilitatea sa mai selecteze clienti. Apoi pana se afiseaza produsele il atentionezi cumva ca se incarca gridul cu produse (afisezi o imagine cu loading peste grid).
Cam asa functioneaza si plugin-ul de jquery pentru autocomplete din cate am vazut eu. Tastezi litere dar numai daca au trecut 10 ms (delay-ul default) intre doua caractere face un request sa-i aduca date.
boldicu:Problema ar fi ca nu stii cand termina utilizatorul selectia?
Problema e ca nu vreau sa programez ;-) Vreau sa gasesc ceva deja facut pentru o problema asa simpla...
jqGrid pt. web apps?
Joy, frustration, excitement, madness, aha's, headaches ... codito ergo sum!
Fiecare are un spirit care poate fi slefuit, un corp care poate fi antrenat si o cale pe care sa o urmeze ...
nope...
ignatandrei:Problema e ca nu vreau sa programez ;-) Vreau sa gasesc ceva deja facut pentru o problema asa simpla...
tudor.t: cum vrei sa arate pe partea de UI
Un listbox cu clienti
un listbox cu produse.
Dai click pe 2 ,3 , 7 clienti : iti arata DOAR intersectia produselor cumparate de clientii respectivi
Dai click pe 2,3,7 produse : iti arata DOAR clientii care au cumparat TOATE produsele respective
Uite care ar fi ideea mea:
Datele poti sa le scoti in felul urmator (cea mai simpla metoda dupa mine, insa exista anumite optimizari care se pot face pe DB si la query):
Exemplu in SQL (insa poate fi si Linq)
SELECT *FROM ProductsWHERE ID_Product IN (SELECT DISTINCT Product_ID FROM Sales WHERE Client_ID IN (1,2,3 ...))
SELECT *FROM ClientsWHERE ID_Client IN (SELECT DISTINCT Client_ID FROM Sales WHERE Product_ID IN (1,2,3 ...))
Iar pe partea de UI, poti sa iti imparti form-ul (pagina) in doupa pe verticala, si fiecare sa aiba un grid (Produse, Clienti), iar filtrarea se face pentru grid-ul care are nu are focus.
Pentru a usura navigarea poti sa agaugi un row fictiv gol care cand e selectat, nu e filtrat deloc gridul analog.
Ex:
Produse:
(Toate) Mere Pere Alune
Clienti:
(Toti) Mircea Ion Maria
Cand se selecteaza Mere + Pere sa zicem vor fi afisati clientii:
(Toti) Ion Maria
Daca utilzatoru schimba focusul in gridul 2 (Clienti) si selecteaza (Toti) gridul (1) cu produse nu va mai fi filtrat (insa gridul 2 ramane filtrat pana se selecteaza (Toate) in gridul (1).
Computers are high-speed idiots, programmed by low-speed idiots.
Sunt sigur ca Andrei stie cum sa implementeze asa ceva, da' inteleg ca ar vrea sa gaseasca o componenta gata implementata pentru asa ceva (doar pe partea de UI presupun, ca business logic-ul si-l scrie fiecare dupe dorinta).Nu stiu daca exista asa ceva - am vazut o singura data ceva oarecum similar pe vremea Delphi 5 - un control (custom) ce permitea gestionarea unei relatii many-to-many intre doua entitati - insa astfel de controale sunt destul de rare deoarece fiecare aplicatie are alte idei despre cum ar trebui sa arate/functionze un astfel de control..
tudor.t:da' inteleg ca ar vrea sa gaseasca o componenta gata implementata pentru asa ceva (doar pe partea de UI presupun, ca business logic-ul si-l scrie fiecare dupe dorinta).
Vreau sa ii dau doar un datatable ( sau ceva similar) de forma Client, Comanda,Produs si sa faca el in memory tot.
Si da, ai dreptate ... vreau un control care sa faca asa ceva direct, nu sa fac eu ... caci mi se pare functionalitatea triviala ...si destul de folosita de orice Businessman
am gasit in Excel 2010 ceva asemanator
http://blogs.msdn.com/excel/archive/2009/09/23/easy-and-even-fun-data-exploration-introducing-excel-2010-slicers.aspx
Pai daca vrei sa folosesti ca sursa de date un cub olap, exista o destul de multe componente care sa faca asta.
Daca vrei ceva pentru vizualizare folosind un server SQL simplu, singura componenta care o stiu eu e de la DataDynamics - Analysis (inafara de Pivot Table din Excel).
Link pentru relational data: http://www.datadynamics.com/Help/ddAnalysis/RelationalData.html