PDA

View Full Version : ارائه کنترل پیشرفته ReportControl



Payam Moradi
دوشنبه 11 دی 1385, 00:05 صبح
این کنترل میتواند جایگزین کنترلهایی مانند DataGrid Listview و TreeView و ... شود.
این کنترل کاملا شبیه Grid در Outlook 2003 میباشد و قابلیت نمایش اطلاعات یک ارایه و یا رکوردست و غیر در آن وجود دارد.

دیتا در این کنترل به دو روش میتوان نمایش داد:
روش رکوردها:
در این روش اطلاعات را با اضافه کردن هر سطر (Record) نمایش میدهیم. در این روش بسته به اندازه اطلاعات، حافظه اشغال میشود.
در این روش قابلیت Sort, Group, Filter امکانپذیر است.
روش مجازی:
در این روش به تعداد رکوری (سطر) که قرار است نمایش داده شود سطر مجازی ایجاد شده و در زمان لازم آن سطر با گرفتن اطلاعات (مثلا از یک آرایه یا یک Recordset) پر میشود و پس از آن حذف میشود. در این روش فقط به اندازه یک صفحه از رکوردها حافظه اشغال میشود.
در این روش قابلیت Sort, Group, Filter در حالت معمول امکانپذیر نمی باشد.

بدیهی است روش دوم برای حجم زیاد اطلاعات مناسبتر است و میتوان قابلیت Sort, Group, Filter را با کمی خلاقیت اضافه کرد.(خود همیشه ترجیح میدهم از روش دوم استفاده کنم).

بهر حال برای هر دو مورد مثال زده شده است. ابتدا فایل Payam.ReportControl.ocx موجود در پوشه COM را رجیستر نمایید.در این مثال ها از BIBLIO.MDB استفاده شده است. این بانک را از روی سی دی ویژال بیسیک و یا مسیر نصب آن پیدا کرده و در هر کدام از پوشه های Record Sample و Virtual list کپی نمایید.

من از این کنترل در برنامه های متعددی به جای DataGrid و مشابه آن استفاده کردم و مشکلی نداشتم. بهرحال مشکلی بود مطرح کنید تا برطرف شود.

موفق باشید.:چشمک:
----------------------------
----------------------------

Payam Moradi
دوشنبه 11 دی 1385, 00:23 صبح
این هم یک نمونه دیگر.:چشمک:
----------------------------
----------------------------

Payam Moradi
دوشنبه 11 دی 1385, 23:23 عصر
این هم نمونه ای دیگر!:لبخندساده:

Payam Moradi
یک شنبه 24 دی 1385, 23:54 عصر
اینم یک مثال کاملتر:

سایر فرم ها رو از منوی ReportControl و منوی Test ببینید.
موفق باشید!:چشمک:
.
.
.

adhami
سه شنبه 26 دی 1385, 11:22 صبح
ابتدا فایل Payam.ReportControl.ocx موجود در پوشه COM را رجیستر نمایید.
----------------------------

با سلام من نتونستم فایل ocx رو رجیستری کنم ؟
لطفا من را راهنمایی کنید
با تشکر

Payam Moradi
سه شنبه 26 دی 1385, 12:24 عصر
جهت رجیستر کردن دو فایل reg.bat و regsvr32.exe را از فایل فشرده ذیل دریافت و در مسیری که Payam.ReportControl.ocx قرار دارد کپی کرده و فایل reg.bat را اجرا نمایید!
..
..

sjj
سه شنبه 26 دی 1385, 16:50 عصر
جناب مرادی با عرض سلام خدمت شما باید بگم که کنترل هایی که شما ارئه می کنید بسیار زیبا هستند ولی مشکلی که وجود داره اینه که استفاده از این کنترل ها خیلی آسون نیست و برای هر تغییر کوچیکی باید چندین خط کد نوشت.در واقع در محیط دیزاین کاربرد چندانی ندارن.حالا فرض کنید که ما برای یه پروژه تجاری بخوایم از اینا استفاده کنیم.
اگه این مشکل حل شدنی باشه خیلی عالی می شه.
با تشکر.

Payam Moradi
سه شنبه 26 دی 1385, 17:47 عصر
جناب مرادی با عرض سلام خدمت شما باید بگم که کنترل هایی که شما ارئه می کنید بسیار زیبا هستند ولی مشکلی که وجود داره اینه که استفاده از این کنترل ها خیلی آسون نیست و برای هر تغییر کوچیکی باید چندین خط کد نوشت.در واقع در محیط دیزاین کاربرد چندانی ندارن.حالا فرض کنید که ما برای یه پروژه تجاری بخوایم از اینا استفاده کنیم.
اگه این مشکل حل شدنی باشه خیلی عالی می شه.
با تشکر.

سلام
کاملا حق با شماست.
ولی اینجانب به شخصه 10 خط نوشتن کد برای یک کنترل را در برابر چند مزیت مهم این کنترلها ناچیز میدونم. هیچوقت باعث کند و یا قفل شدن برنامه نمیشوند. سرعت پردازش بالا دارند. هیچوقت مشکلی در مورد کاربرد در برنامه های فارسی نداشتم (به غیر موارد ناچیز که هنوز راهی پیدا نشده و زیاد هم مهم نیست).
عدم وجود یک Property Page یا تنظیمات در دیزاین، عاملی ست که باعث سرعت لود این کنترل ها میشود.
لازم نیست در همه فرمها کد نوشته شود. بلکه تغییرات عمومی را بصورت یک تابع عمومی تعریف کنید و کافیست شی مربوطه را به تابع ارجاع دهید.

بهر حال انتخاب با شماست.


اگر هم فکر میکنید جایی مشکلی وجود دارد و یا نوشتن کد اضافی غیر منطقی می‌یاشد، بفرمایید تا لازم راهنمایی لازم صورت گیرد.


فعلا فرصتی نیست. ولی حداکثر تا سه هفته دیگه با معرفی نسخه های جدید بحث آموزش کنترل ها را شروع میکنم.
موفق باشید.

vb341
سه شنبه 26 دی 1385, 23:02 عصر
آقا پیام واقعا دستتون درد نکنه ولی اگر روش کار مثل سایر کنترلها بصورت ویزارد میشد که خیلی بهتر بود

saeen
چهارشنبه 27 دی 1385, 20:11 عصر
سلام
جناب آقای مرادی این کامپوننتی که معرفی کردین اسکرول افقی هم داره؟
من ندیدم

sohrab o
جمعه 29 دی 1385, 12:49 عصر
جالب بود
حالا اگه کسی از این استفاده کنه بعدا تو پروژه اشکالی رخ نمی ده مثلا یه قفل زمانی یا حجمی؟

sohrab o
جمعه 29 دی 1385, 12:56 عصر
می دونید منظورم اینه که اطمینان از اینکه بعدا خطایی رخ نده
من کامل نگاه نکردم اما قسمتی برای تغییر فونت ندیدم

Payam Moradi
شنبه 30 دی 1385, 01:23 صبح
سلام



آقا پیام واقعا دستتون درد نکنه ولی اگر روش کار مثل سایر کنترلها بصورت ویزارد میشد که خیلی بهتر بود

علتش قبلا ذکر شده!



سلام
جناب آقای مرادی این کامپوننتی که معرفی کردین اسکرول افقی هم داره؟
من ندیدم


میتونه دو دلیل داشته باشه:
1) شما خصوصیت AutoColumnSizing همیشه برابر True قرار میدهید. این خاصیت باعث میشه که کنترل به صورت خودکار تمامی ستونها را در عرض ReportControl جای بده و Scroll افقی رو محو کنه.
2) شما گزینه بالا رو برابر False قرار دادید ولی مجموع طول سرستونها کمتر از عرض ReportControl است. بنابراین Scroll افقی دیده نمیشه.


جالب بود
حالا اگه کسی از این استفاده کنه بعدا تو پروژه اشکالی رخ نمی ده مثلا یه قفل زمانی یا حجمی؟
این کنترل قفل نداره. خاطر جمع.
ضمنا تست خودش رو توسط خودم در پروژهای حجیمی پس داده.


من کامل نگاه نکردم اما قسمتی برای تغییر فونت ندیدم
در حالت design فونت تنظیم نمیشه.
باید در یک قسمت مناسب از کدهای ذیل جهت تغییر Font استفاده نمایید:

ReportControl1.PaintManager.CaptionFont = <FontObject>
ReportControl1.PaintManager.TextFont = <FontObject>
ReportControl1.PaintManager.PreviewTextFont = <FontObject>
ReportControl1.ToolTipContext.Font = <FontObject>

هر کدام از خطوط بالا فونت یک قسمت رو تنظیم میکنه. از روی نام هر کدام معلومه فونت کجا تغییر پیدا میکنه.
به جای <FontObject> هم میتونید شی فونتی که قبلا تعریف و تنظیم نمودید بگذارید. یا برای راحتی بجای آن بگذارید Label1.Font . البته Label1 در فرم ایجاد شده باشد و فونت مورد نظر را در این لیبل تنظیم کرده باشید. یا هم جلوی فونت یک دات (.) بگذارید تا لیست خصایص فونت جهت تنظیم باز بشه.

از طریق کد ذیل هم میتونید فونت هر سلول را قبل از نمایش تنظیم کنیم. جهت اطلاع بیشتر به نمونه برنامه VirtualList مراجعه کنید:


Private Sub ReportControl1_BeforeDrawRow(ByVal Row As Payam_ReportControl.IReportRow, ByVal Item As Payam_ReportControl.IReportRecordItem, ByVal Metrics As Payam_ReportControl.IReportRecordItemMetrics)
Metrics.Font = <FontObject>
End Sub

بازم اگه مشکلی بود ...

atrinsoft
دوشنبه 22 اسفند 1390, 11:59 صبح
یه مشکل داره - من هر کاری کردم نتونستم درستش کنم اونم این هست که توی ویندوز 7 جواب نمی ده این کنترل ها و خطا می زنه
system error &H80004005...