Wednesday, February 27, 2008

Их өгөгдөлтэй өгөгдлийн сангийн хүснэгтийг Grid харуулах нь

to see in english follow: http://neu2st.blogspot.com/2008/02/how-to-show-large-table-in-data-grid.html

.НЭТ дээр өгөгдлийн сантай application program бичиж байгаа мань мэтийн хүмүүст дараах асуудал тулгардаг. Энэ бол хэт их өгөгдөлтэй өгөгдлийн сангийн хүснэгтийг Fill хийх үед програм удаан хугацаагаар Not responding болдог. Мөрийн тоо нь 375000 орчим байсан болохоор шууд Fill хийвэл 3 мин орчим хугацаа зарцуулаад байсан. Аз таарч миний ашигладаг Dev eXpress Components-ийн GridControl component нь энэ асуудлыг шийдсэн байсан л даа. GridControl component-д ServerMode гэсэн property байдаг. ServerMode=false бол grid нь энгийн Fill функцээр DataTable-ээ дүүргэнэ гэсэн үг. Харин ServerMode=true байвал эхлээд цонхонд харагдах өгөгдлийг өгөгдлийн сангаас авчрана. Үүнээс хойш скроллдох (filter, sort) үед дэлгэцэнд харагдах мэдээллээ л сангаас аваад байна. Дараах дарааллын дагуу хийгээд үзэхэд үнэн кайф авна доо.

1. Формоо үүсгэ (ex: Form1)
2. DataSet ээ визардынх дагуу үүсгэчих (ex: DataSet1; CustomersDataTable)
3. GridControl-оо Form1 дээрээ нэмнэ (ex: GridControl1)
4. GridControl1.ServerMode property-г True болго
5. XpServerCollectionSource гэсэн контрол байгаа. Тэрнийг аваад форм дээрээ тавь (ex: xpServerCollectionSource1)
6. xpServerCollectionSource1.ObjectClassInfo гэдэг property-г DataSet1.CustomerDataTable гэсэн утга сонгож өг. WindowsApplication1.DataSet1+CustomerDataTable гэсэн утга автоматаар ороод ирнэ.

7. GridControl1.DataSource= xpServerCollectionSource1
8. Form1_Load дээр энэ кодыг нэмж өг. XpoDefault.ConnectionString= DevExpress.Xpo.DB.OracleConnectionProvider.GetConnectionString("local", "scott", "tiger");


Энэ тохиолдолд Oracle 10g ашигласан байгаа. Ер нь бол MSSQL, mySQL, Interbase өөр юу юу ч байдаг билээ, бүгдийн л ашиглаж болох юм байна лээ.

http://www.devexpress.com сайтаас энэ компонентийг татаж аваад крак олоод ашиглачихад давгүй л юм байна лээ. Интерактив-ийн Interactive Diamond-г хийхэд ашигласан компонентүүд шүү :)