Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Info Coronavirus/Vaccinare vs Fake News

Liza electrica cu catarg sau stiv...

Tazz & Kaufland

Router wireless ZTE ZXHN H3601, D...
 Amplificator pentru boxe Z906

TVA 5 sau 19%

VW ID3 facelift 2023

Taxare autoconsum prosumatori
 Achiziție DVD writer extern ...

Problema activare Xbox live gold ...

Fluierat Astra H 1.9 CDTI

Excel - Intrebare referitoare la ...
 Caut dentist care sa pune plombe ...

Grinzi suspendate

BluRay Player 4k

Caloriferele nu se incalzesc
 

Trecerea de la un rand la altul intru-un datagridview

- - - - -
  • Please log in to reply
15 replies to this topic

#1
bibicu2014

bibicu2014

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 25.06.2014
Salut !

Lucrez la o aplicatie in Vb.net 2010 ce foloseste o baza de date sql 2008.
Stiu ca saltul intr-un datagridview de la o inregistrarea curenta la urmatoarea se face cu ajutorul instructiunii tabelabindingsource.movenext().
Cum pot face sa trec de la inregistrarea cu numar 1 la inregistrarea cu numarul 2800 intrun datagridview ce contine peste 75000 de inregistrari ?
Multumesc !

#2
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 19,353
  • Înscris: 24.02.2006
http://msdn.microsof...(v=vs.110).aspx

#3
bibicu2014

bibicu2014

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 25.06.2014

View Post_Smiley_, on 25 iunie 2014 - 09:06, said:


M-am uitat pe adresa din link, dar nu inteleg cum trebuie sa fac in cazul meu .
Mentionez ca sunt incepator in VB.net si orice ajutor este binevenit.
Mare parte din timp am scris aplicatii in Visual Foxpro si acum incerc sa trec la VB.net.
In Visual foxpro scriam "goto record 2800" si ma arunca pe inregistrarea cu numarul 2800 .
In VB.net vad ca o chestie simpla se rezolva foarte greu.

#4
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 19,353
  • Înscris: 24.02.2006
la descrierea proprietatii Position scrie asa:

Quote

Gets or sets the index of the current item in the underlying list.
deci poate fi folosita atat pentru a afla pozitia curenta cat si pentru a seta pozitia curenta.

tabelabindingsource.Position = 2800

#5
bibicu2014

bibicu2014

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 25.06.2014

View Post_Smiley_, on 25 iunie 2014 - 11:36, said:

la descrierea proprietatii Position scrie asa:

deci poate fi folosita atat pentru a afla pozitia curenta cat si pentru a seta pozitia curenta.

tabelabindingsource.Position = 2800


A functionat.
Multumesc !

#6
bibicu2014

bibicu2014

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 25.06.2014
Este posibil ca un form ce contine un datagridview ce afiseaza in jur de 20.000 de inregistrari si 5 coloane sa se incarce in 6-10 secunde ?
In tabel am creat cheie primara de tip int, am facut indexare la campul ce contine cheia primara, si am creat relatii cu celelalte tabele din baza de date.
In Visual Foxpro acelasi form se incarca in 1 secunda.
Este ceva ce imi scapa si nu stiu ce.
Ma puteti ajuta cu niste sfaturi ?

#7
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 39,840
  • Înscris: 30.07.2003
VFP nu incarca toate inregistarile, doar o pagina. Pe urma in functie de cum te mai plimbi pe acolo.
Nu stiu acum la gridul tau (vezi in documentatie) dar exista notiunea de virtual grid care incarca la fel, pe urma cu desenarea iarasi e un aspect, vezi unde se pierde timpul (la incarcare sau la executia pe server), tin minte ca daca ai un bindingsource merge mai greu ca un dataview etc.

#8
bibicu2014

bibicu2014

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 25.06.2014
Ma gandesc cu groaza in cat timp se va  incarca datagridview cu 100.000-500.000 inregistrari.
In SQl Server 2008 R2 afisarea inregistrarilor din tabel nu dureaza mai mult de 1 secunda .
Problema este la afisarea din aplicatia facuta in VB.net 2010.
De cateva zile caut o solutie pentru rezolvarea acestei probleme si bat pasul pe loc.

#9
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 39,840
  • Înscris: 30.07.2003
Acum nu compara o tehnologie nativa cu una managed.
Maine poti sa-ti fac niste teste, intr-un proiect .NET la munca stiu ca s-a preferat implementarea unor DataTable custom in locul celor default tocmai pentru performante slable si mult cod balast (pentru noi) asociat in spate si care mananca si ala din resurse.

Edited by neagu_laurentiu, 30 June 2014 - 18:34.


#10
bibicu2014

bibicu2014

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 25.06.2014
Ma poate ajuta cineva cu alte idei ?

#11
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 19,353
  • Înscris: 24.02.2006
cu greu poti gasi un motiv serios pentru a afisa 20k inregistrari. apeleaza la paginare, o sa-ti rezolve toate problemele.

#12
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 39,840
  • Înscris: 30.07.2003
Testeaza mai intai sa vezi unde-i pierderea de timp, mai jos dau niste monstre de cod in diferite variante:
DataTable t;
SqlDataAdapter a;
SqlConnection c;
DataGridView g;
DateTime t1, t2;

c = new SqlConnection("Data Source=0.0.0.0\\InstantaSQL;Initial Catalog=tempdb;User ID=utilizator;Password=parola");
c.Open();
t = new DataTable();
a = new SqlDataAdapter("SELECT * FROM table", c);
t1 = DateTime.Now;
a.Fill(t);
t2 = DateTime.Now;
MessageBox.Show("DataTable:" + (t2 - t1).ToString());

t1 = DateTime.Now;
g.DataSource = t;
t2 = DateTime.Now;
MessageBox.Show("GridView: " + (t2 - t1).ToString());

c.Close();


DataTable t;
SqlDataAdapter a;
DataView v;
SqlConnection c;
DataGridView g;
DateTime t1, t2;

c = new SqlConnection("Data Source=0.0.0.0\\InstantaSQL;Initial Catalog=tempdb;User ID=utilizator;Password=parola");
c.Open();
t = new DataTable();
a = new SqlDataAdapter("SELECT * FROM table", c);

t1 = DateTime.Now;
a.Fill(t);
t2 = DateTime.Now;
MessageBox.Show("DataTable:" + (t2 - t1).ToString());

t1 = DateTime.Now;
v = new DataView(t);
t2 = DateTime.Now;
MessageBox.Show("DataView: " + (t2 - t1).ToString());

t1 = DateTime.Now;
g.DataSource = v;
t2 = DateTime.Now;
MessageBox.Show("GridView: " + (t2 - t1).ToString());

c.Close();


DataTable t;
SqlDataAdapter a;
BindingSource b;
SqlConnection c;
DataGridView g;
DateTime t1, t2;

c = new SqlConnection("Data Source=0.0.0.0\\InstantaSQL;Initial Catalog=tempdb;User ID=utilizator;Password=parola");
c.Open();
t = new DataTable();
a = new SqlDataAdapter("SELECT * FROM table", c);

t1 = DateTime.Now;
a.Fill(t);
t2 = DateTime.Now;
MessageBox.Show("DataTable:" + (t2 - t1).ToString());

b = new BindingSource();
t1 = DateTime.Now;
b.DataSource = t;
t2 = DateTime.Now;
MessageBox.Show("BindingSource: " + (t2 - t1).ToString());

t1 = DateTime.Now;
g.DataSource = b;
t2 = DateTime.Now;
MessageBox.Show("GridView: " + (t2 - t1).ToString());

c.Close();



#13
bibicu2014

bibicu2014

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 25.06.2014

View Postneagu_laurentiu, on 30 iunie 2014 - 18:33, said:

Maine poti sa-ti fac niste teste, intr-un proiect .NET la munca stiu ca s-a preferat implementarea unor DataTable custom in locul celor default tocmai pentru performante slable si mult cod balast (pentru noi) asociat in spate si care mananca si ala din resurse.

Mai ramane valabil ?
Ma poti ajuta cu niste teste daca iti trimit aplicatia ?

#14
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 39,840
  • Înscris: 30.07.2003
Pune pe site intr-o arhiva dar maine cand am un server disponibil pot face testele. Dar pana atunci vezi tu conform cu ce ti-am dat mai sus (ca poate nu ai un profiler) unde s-ar pierde timpul.

#15
bibicu2014

bibicu2014

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 25.06.2014

View Postneagu_laurentiu, on 01 iulie 2014 - 21:11, said:

Pune pe site intr-o arhiva dar maine cand am un server disponibil pot face testele. Dar pana atunci vezi tu conform cu ce ti-am dat mai sus (ca poate nu ai un profiler) unde s-ar pierde timpul.

Te rog sa-mi trimiti adresa de e-mail .

#16
bibicu2014

bibicu2014

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 25.06.2014
Am creat si am folosit urmatoarea procedura stocata pe server : select * from pacienti where nume='popescu ion'
Problema este ca incarcarea datelor din tabela pacienti (nume, cnp, datanasterii, etc.) in form2 se face tot greu.
Din aproape in aproape poate reusesc.

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate