View Full Version : کند بودن لود اولین بار فرم Crystal report
Topcoding
جمعه 28 آبان 1389, 18:02 عصر
با سلام
من با C# 2008 و sql 2005 برنامه ای نوشتم در این برنامه از CrystalReport برای گزارش گیری استفاده کرده ام
برای اتصال به دیتابیسم از DataAdapter که به صورت wizard درست شده استفاده کرده ام DataSet ام را که برای
Crystal Report فرستاده ام را از همین DataAdapter ایجاد کردم و کد زیر را در لود Form که قراره گزارشم را نشان بدهد نوشتم البته بگویم که dataset61 را قبلا پر کرده ام.
crystalReport41 .Load(Application.StartupPath + @"\crystalReport41.rpt");
crystalReport41 .SetDataSource(dataSet61 );
crystalReportViewer1.ReportSource = crystalReport41;
حال وقتی که روی دکمه گزارش کلیک می کنم خیلی خوب و با سرعت گزارشم را نشان می دهد ولی مشکل از آنجا آغاز می شود
که وقتی setup این پروژه را که با VS گرفتم را نصب می کنم و روی دکمه گزارش کلیک می کنم فرم گزارش بعد از گذشت
3 یا 4 دقیقه :عصبانی++::گریه:(وحشتناک) لود می شود ولی دفعه های بعد که کلیک کنم خیلی سریع لود می شود . حال اگه برنامه را ببندم و دوباره اجرا کنم باز دفعه اول همین مشکل را دارد و دفعه های بعدی خیلی سریع لود می شود
از دوستان می خواهم که مرا راهنمایی کنند . با تشکر
5mmmmm
سه شنبه 02 آذر 1389, 16:05 عصر
من هم همین مشکل را داشتم.چند تا راه حل به نظرم می رسه:
1- توی اجرای اول برنامت یه پروگرس بار بگذار.در حین اجرای اون یه گزارش بطور مخفیانه لود کن و ببند تا کاربر متوجه نشه و کریستال هم برای گزارشات بعدی آماده بشه
2-از thread استفاده کن
3-حجم داده های ارسالیت به کریستال را بهینه کنی
4-از کریستال استفاده نکنی
Topcoding
سه شنبه 02 آذر 1389, 23:24 عصر
من هم همین مشکل را داشتم.چند تا راه حل به نظرم می رسه:
1- توی اجرای اول برنامت یه پروگرس بار بگذار.در حین اجرای اون یه گزارش بطور مخفیانه لود کن و ببند تا کاربر متوجه نشه و کریستال هم برای گزارشات بعدی آماده بشه
2-از thread استفاده کن
3-حجم داده های ارسالیت به کریستال را بهینه کنی
4-از کریستال استفاده نکنی
---------------------------------------
ممنون دوست عزیز از جوابتان:تشویق::قلب:
واما آیتم 4 که نمی شه درمورد آیتم سوم هم که حتی یک صفحه خالی هم زمان زیادی برای لود گزارش می کشد و آیتم 2 هم بلد نیستم و اما آیتم 1 که فکر کنم عملی تر باشه. لطف کنید اگه اشکالی نداشته باشه درمورد پروگرس بار کردن برنامه کمی توضیح بدهید و اگه بشود کد آن را بگذارید ممنون میشوم:قلب:
mustafa13
چهارشنبه 03 آذر 1389, 19:00 عصر
---------------------------------------
ممنون دوست عزیز از جوابتان:تشویق::قلب:
واما آیتم 4 که نمی شه درمورد آیتم سوم هم که حتی یک صفحه خالی هم زمان زیادی برای لود گزارش می کشد و آیتم 2 هم بلد نیستم و اما آیتم 1 که فکر کنم عملی تر باشه. لطف کنید اگه اشکالی نداشته باشه درمورد پروگرس بار کردن برنامه کمی توضیح بدهید و اگه بشود کد آن را بگذارید ممنون میشوم:قلب:
سلام
حال اگه شما بياييد از ايتم اولي استفاده كنيد مشكل تون به نظر من بدتر مي شود چون زمان لود شدن برنامه تون زمان زيادي طول مي كشد فكر مي كني مشكل تون را حل مي كنه يا اضافه مي كنه
Topcoding
چهارشنبه 03 آذر 1389, 22:52 عصر
سلام
حال اگه شما بياييد از ايتم اولي استفاده كنيد مشكل تون به نظر من بدتر مي شود چون زمان لود شدن برنامه تون زمان زيادي طول مي كشد فكر مي كني مشكل تون را حل مي كنه يا اضافه مي كنه
سلام mustafa13
نظر شما هم منطقی است ولی خب نمی دانم چیکار کنم اگه شما راه حلی به نظرتان رسید
مرا راهنمایی کنید
با سپاس:قلب:
Topcoding
یک شنبه 14 آذر 1389, 19:06 عصر
من هنوزم مشکلم رفع نشده از مدیران و دوستان برنامه نویس می خواهم مرا راهنمایی کنند.
این را هم اضافه کنم که اگر دیتابسم Access باشد این مشکل پیش نمی آید یا حداقل زمان کمتری نسبت به sql برای لود اولین بار فرم طول می کشد
hossin.esm
سه شنبه 16 آذر 1389, 00:41 صبح
میتونی از BackgroundWorker برای لود کردن کریستال استفاده کنید.
هنگام اجرای برنامه BackgroundWorker اجرا بشه و انو لود کنه.
Topcoding
سه شنبه 16 آذر 1389, 13:06 عصر
میتونی از BackgroundWorker برای لود کردن کریستال استفاده کنید.
هنگام اجرای برنامه BackgroundWorker اجرا بشه و انو لود کنه.
سلام دوست عزیز
من تاحالا از BackgroundWorker استفاده نکرده ام میشه کدش را بزارید و یه کم راجع به اون توضیح بدهید
می بخشی اگه وقتت رو می گیره:خجالت:
hossin.esm
سه شنبه 16 آذر 1389, 14:49 عصر
privatevoid Form1_Load(object sender, EventArgs e)
{
BackgroundWorker bgw = newBackgroundWorker();//ایجاد
bgw.DoWork += newDoWorkEventHandler(bgw_DoWork); ساخت رویداد اجرا
bgw.RunWorkerAsync();اجرا
}
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
کد لود کردن کریستال ریپورت
}
Topcoding
سه شنبه 16 آذر 1389, 16:39 عصر
خیلی ممنون از پیگیریتون
فقط یه مشکلی وجود داره در ساخت رویداد اجرا در کد زیر
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
به پارامتر داخل پرانتز گیر می ده و می گه این نام به طور صحیح نمی باشد لطف می کنید علتش رو بگویید تا درست کنم
hossin.esm
سه شنبه 16 آذر 1389, 17:07 عصر
هنگام ایجاد رویداد بعد از اینکه += را گذاشتید دو بار کلید tab بزنید . به صورت خودکار این رویداد ایجاد میشه.
این مشکل احتمالا بخاطر متفاوت بود نام داخل پرانتز و نام تابعی که به عنوان رویداد ایجاد می شود هست
BackgroundWorker را میتونید از toolsbox->components هم به فرم اضافه کنید و با دوبار کلیک روی ان رویداد را ایجاد کنید و فقط کد اجرا را برای بزنید
Topcoding
سه شنبه 16 آذر 1389, 21:25 عصر
یه بار دیگه ممنونم ولی دوباره به مشکل برخوردم
من توی گزارشم تاریخ روز و دو متغیر که به صورت parameter Fields تعریف کردم و توی لود فرم گزارش مقداردهی میکنم و به گزارشم می فرستم والان نمی دانم این ها را کجای فرم گزارش مقدار دهم و همچنین دستور select و پر کردن dataset م رو هم نمی دانم کجای فرم بگزارم در قسمت form_load و قبل از ایجاد bgw یا بعد از اجرا یا اصلا در تابع bgw_dowork واینکه شما گفتید کد لودکردن کریستال رو در تابع bgw_dowork بنوسم منظورتان فقط crystalReport11.Load(Application.StartupPath + @"\crystalreport11.rpt");
بود و همچنین من کد زیر را که در تابع bgw_dowork اضافه میشود را حذف کردم چون خطا می گرفت
throw new NotImplementedException();
من کدم را می فرستم تا شما بررسی کنید .
امیدوارم بتوانم زحمات شما را در جای دیگری جبران کنم
hossin.esm
سه شنبه 16 آذر 1389, 23:10 عصر
من تو پست های قبلی گفتم که هنگام اجرای برنامه . یعنی در فرم اصلی.
خوب حالا یک توضیح کامل تر میدم .
BackgroundWorker برای پردازش پردازش های وقت گیر و هم زمان سازی چند پردازش استفاده می شود .مثلا انتقال فایل و کار با فرم های برنامه. شما اگر در انتقال فایل از BackgroundWorker استفاده نکنید در زمان انتقال کار دیگری
نمی توانید انجام دهید .و ولی اگر انتقال را به BackgroundWorker بسپارید .میتوانید در برنامه فرم های دیگر را باز کنید یا ببندید و...
شما برای لود گزارش هنگام اجرای برنامه و لود فرم اصلی برنامه یک BackgroundWorker ایجاد کنید . و فرم گزارش را در ان ایجاد کنید و ان را لود کنید .
برای لود هم میتوانید یک تابع با دسترسی public یا internal در فرم گزارش ایجاد کنید و کد های مربوط به گزارش (form_load) را در ان قرار دهید. و در BackgroundWorker (فرم اصلی) این تابع را صدا بزنید.
و هر جا که خواستید فرم گزارش را نمایش دهید دوباره ان را ایجاد و نمایش دهید .
در رابطه با
throw new NotImplementedException();
این کد کارش ایجاد خطا است . و باید حذف شود.
اگر مثال خواستی بگو تا ایجاد کنم
Topcoding
چهارشنبه 17 آذر 1389, 00:32 صبح
من کاری که گفتی رو کامل متوجه نشدم . لطف می کنید که با یه مثال مارا مهمان کنید. ولی من آمدم توی لود فرم اصلیم bgw را ایجاد کردم و کد زیر را در همان فرم نوشتم
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
//throw new NotImplementedException();
Form myform = new Form3(" ", " "," ");
myform.Show();
myform.Hide();
myform.Close();
}
البته فک نکنم hide کردن زیاد تاثیر داشته باشه ولی هیچ تغییر دیگه ای در برنامه به خصوص Form3 که فرم گزارشم هست ندادم .
می تونید با یه مثال ساده و تکه کد ها اون تابع با دسترسی public و تغییرات توی فرم اصلی و Form3 را برای من مبتدی توضیح بدهید
تنها مشکلی که داره اینه که اگر کاربر بلافاصله بعد از ورود به برنامه بخواهد گزارش بگیرد کله رشته ای که برایش بافته ایم پنبه خواهد شد.راجع به این مشکل چه نظری دارید دوست عزیز راهی هست؟
بازم ممنونم:قلب:
hossin.esm
چهارشنبه 17 آذر 1389, 09:34 صبح
تنها مشکلی که داره اینه که اگر کاربر بلافاصله بعد از ورود به برنامه بخواهد گزارش بگیرد کله رشته ای که برایش بافته ایم پنبه خواهد شد.راجع به این مشکل چه نظری دارید دوست عزیز راهی هست؟
بازم ممنونم:قلب:
تا کاربر فرم گزارش را باز کند واطلاعات را پر کند فکر کنم گزارش لود شده باشد و زمان لود اولیه کریستال از بین رفته باشد.
(راستی میتونی از ابزارهای گزارش گیری دیگه هم استفاده کنی که هم سریع تر و هم نیاز به نصب ندارد)
یک مثال هم گذاشتم (چون دیتابیس و فایل گزارش را نداشتم نتونستم تستش کنم)
Topcoding
چهارشنبه 17 آذر 1389, 18:39 عصر
دمت جیز پسر:قلب: خیلی باحالی
ببخشیدشما گفتید که از ابزارهای گزارش گیری دیگه استفاده کنم که بدون نصب هم می باشد.میشه چندتاشو نام ببرید و لینک دانلودش رو بزارید.
این کریستال خیلی اذیتم کرده یکی واسه لودش بود که با کمک شما یه جورایی دورش زدیم ولی یه مشکل دیگه که بااون دارم اینکه فرم گزارش توی کامپیوتر من وبعضی دیگه خیلی خوب جواب می ده ولی روی بعضی کامپیوتر ها
بد لود می شود مثلا گوشه سمت راستش رو نشون نمی ده اگه اونجا فیلد تعداد ردیف ها باشه اون فیلد رو نشان نمی دهد . میشه علتش رو بگید و چه جوری رفعش کنم
با سپاس:تشویق:
hossin.esm
چهارشنبه 17 آذر 1389, 19:45 عصر
ابزار گزارش گیری زیاد هست جستجو کنی پیدا می کنی
یکی از ان ها Stimulsoft Reports هست . که من باهاش کار کردم . سرعت خوبی دارد ، منوهاش فارسی هم میشه ، نیاز به نصب ندارد و ...
در رابطه با این مشکل کریستال هم من اطلاعی ندارم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.