PDA

View Full Version : سرعت کم در گزارشگیری با کریستال



hana2064
چهارشنبه 26 فروردین 1388, 08:38 صبح
سلام
من تو برنامه ام برای گزارش گیری از کریستال ریپورت خود دات نت 2005 استفاده می کنم
توی فرم اول اطلاعاتی وارد تکست باکس ها میشه و بعد از ثبت یه دکمه برای چاپ اطلاعات وارد شده قرار دادم که تویه فرم دیگه گزاش رو نشون میده اما این فرم خیلی دیر بالا میاد در حالی که من فقط یک سطر از جدولم رو پرینت میگیرم که تعداد فیلدهاش هم خیلی کمه
برای سرعت بیشتر توی نمایش گزار ش چیکار باید بکنم


{
DataTable dt_rs = new DataTable();
DataBase db = new DataBase();

string strs = "select * from vajh where sanad='" + label1.Text + "' and sal_mali='" + Convert.ToInt32(label3.Text) + "'";
dt_rs = db.MySelect(strs);
CrystalReport51.SetDataSource(dt_rs);
crystalReportViewer1.ReportSource = CrystalReport51;
CrystalReport51.SetParameterValue("family", label2.Text.ToString());
CrystalReport51.SetParameterValue("daryaft_ko", name_karbar.Text.ToString());
CrystalReport51.SetParameterValue("vaziat", vaziat.Text.ToString());
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}

همونطور که میبینید من فقط یک سطر رو انتخاب میکنم و سه تا پارامتر رو از فرم قبل توی این فرم ست میکنم.
اماهمین گزارش برای لود شدن گاهی تا 20 الی 25 ثانیه طول میکشه که خیلی خسته کننده است. مشکلش چیه ؟ ممنونم از راهنمایی همه دوستان

esmaeily-hosein
چهارشنبه 26 فروردین 1388, 09:48 صبح
متد mySelect هم بزار . چیز غریبیه !
تو کریستال از فرمول استفاده نکردی؟

hana2064
چهارشنبه 26 فروردین 1388, 10:39 صبح
این متد myselect چیه ؟ چطور باید ازش استفاده کنم ؟
من از فرمول استفاده نکردم . این متد ایا به سریعتر لود شدن گزارش کمک میکنه؟

NewFoxStudent
چهارشنبه 26 فروردین 1388, 11:37 صبح
متد mySelect هم بزار . چیز غریبیه !

منظور ایشون اینه که متد MySelect رو که ازش استفاده کردید هم اینجا بزارید تا ببینیم چیه

dt_rs = db.MySelect(strs);
چیزه غریبیه یعنی تا حالا به این مشکل بر نخوردن

happy65_sh
چهارشنبه 26 فروردین 1388, 12:57 عصر
من هم همین مشکل را داشتم و برای اینکه کاربر در زمان کار با برنامه با این مشکل دست به گریبان نباشه ؛در فرم شروع برنامه ام یکی از کریستال ریپورت هایم را مقدار دهی کرده ام با این کار فقط یک بار اون هم وقتی برنامه برای اولین بار لود میشه چیزی حدود 25-20 ثانیه طول می کشه.
شاید روش منطقی نباشه ولی خوب تا حالا که خوب بوده!

hasan_esfahan
چهارشنبه 26 فروردین 1388, 14:06 عصر
اصولا کریستال این زمان را می بره حالا حتی اگر هم شما هیچ اطلاعاتی نداشته باشید این زمان را حداکثر با یکی دو ثانیه اختلاف کمتر نیاز داره

اما شما می تونید از ابزارهای دیگه vs استفاده کنید مثل ریپورت ویور که مثلا اطلاعاتتون را در یک جدول دیگه add کنید و نمایش بدهید

kiosksoft
چهارشنبه 26 فروردین 1388, 14:22 عصر
در کریستال رویپورت هنگام بارگذاری برای اول سرعت پایین میباشد , چون کریستال ریپورتی که ما استفاده میکنم License ندارد , برای بار اول هنگام بارگذاری خودکار به دنبال License میگردد پس طول میکشد و اینکه برای لود اولیه نیاز هست که ماژولهای کریستال کامل بارگذاری شود تا گزارش Render شود . پس سرعت پایین می آید.در مورد نحوه کدنویسی هم در سایت مثال زیادی ارائه شده است.

hana2064
پنج شنبه 27 فروردین 1388, 08:28 صبح
یه کلاس برای کار با دیتابیس که توش این متد رو تعریف کردم


public DataTable MySelect(string sql)
{
cmd = new SqlCommand();
cmd.Connection=con;
da = new SqlDataAdapter(cmd);
dt=new DataTable();
con.Open();
cmd.CommandText=sql;
da.Fill(dt);
con.Close();
return dt;
}

مشکل کندی گزاش گیری فقط تو گزارش اول نیست تو بیشتر گزارش ها طول میشکه و موقع نشون دادن به دیگران یه خرده سخته . راهی هست که سریعتر بشه گزارش گیری ؟
پارامتر ها رو هم که برداشتم بازم سرعتش تغییری نکرد.:افسرده:

hasan_esfahan
جمعه 28 فروردین 1388, 15:55 عصر
دوست عزیز در دو پست قبلی که توضیح داده شده است

hasan_esfahan
پنج شنبه 03 اردیبهشت 1388, 14:42 عصر
البته اگر از treed استفاده کنی کمی سرعت بهتر میشه یعنی زمان لود پروژه فرم گزارش هم نیز لود بشه


Thread t1;
CrystalReport1 cr1;
public Form1()
{
t1 = new Thread(ali);
t1.Start();
InitializeComponent();
}
void ali()
{
cr1 = new CrystalReport1();
t1.Abort();
}
private void button1_Click(object sender, EventArgs e)
{
crystalReportViewer1.ReportSource = cr1;
}