کند عمل کردن استیمول سافت در هنگام گزارش گیری
سلام دوستان
نرم افزار من به روش انتیتی فریمورک با دیتابیس sql ارتباط دارد.
زمانی که میخواستم از جدول دیتاگرید یک گزارش با استیمول سافت تهیه کنم متاسفانه حدود 1 دقیقه باید منتظر بمونم تا گزارش رو انجام بده.
واقعا چرا اینقدر زمان صرف میشه؟ درحالی که اطلاعات زیادی هم ندارم ! فقط 5 تا رکورد هست!
کوئری آنچنان سنگینی هم ندارم فقط میخواستم برحسب کدپرسنلی اطلاعات را در بازه تاریخی fromDate و untilDate جستجو کنم.
StiReport report = new StiReport();
string fromDate = persianFromDate.Text;
string untilDate = persianUntilDate.Text;
int personelID;
int.TryParse(searchidreport.Text, out personelID);
var query = database.Tble_Attendance.SqlQuery("select * from Tble_Attendance where PersonelID_FK=@p0 AND AttendanceDate>=@p1 AND AttendanceDate<=@p2", personelID, fromDate, untilDate).ToList();
grd_AttendanceReport.DataSource = query;
report.Load(Application.StartupPath + @"\report\Report_Attendance.mrt");
report.RegData("reportAttendance", query);
report.Compile();
report.Show();
به نظرتون مشکل از نوع کوئری نیست که var انتخاب کردم؟البته از نوع لیست هم نوشتم اما تغییری نکرد
List<Tble_Attendance> query = database.Tble_Attendance.SqlQuery("select * from Tble_Attendance where PersonelID_FK=@p0 AND AttendanceDate>=@p1 AND AttendanceDate<=@p2", personelID, fromDate, untilDate).ToList();
ایا ممکن است این مشکل مربوط به نسخه استیمول سافت باشه؟
من نسخه 2016 retail رو استفاده کردم
نقل قول: کند عمل کردن استیمول سافت در هنگام گزارش گیری
دوستان نظری نداشتید؟
من پروژه رو هم در لینک زیر اپلود کردم ممنون میشوم یه نگاهی کنید...حتما قبلش دیتابیس رو اتچ کنید
http://s9.picofile.com/file/83184704...timol.rar.html
نقل قول: کند عمل کردن استیمول سافت در هنگام گزارش گیری
در گزارش، DataSource1 را حذف و یک BusinessObject ایجاد کنید با ستونهای مورد نظر. در برنامه به جای RegData از RegBusinessObject برای ارسال داده ها به گزارش استفاده کنید.
کوئری را هم میتونید به صورت linq بنویسید.
نقل قول: کند عمل کردن استیمول سافت در هنگام گزارش گیری
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
در گزارش، DataSource1 را حذف و یک BusinessObject ایجاد کنید با ستونهای مورد نظر. در برنامه به جای RegData از RegBusinessObject برای ارسال داده ها به گزارش استفاده کنید.
کوئری را هم میتونید به صورت linq بنویسید.
من اکثرا از دیتاتیبل ها استفاده میکنم این روش که معرفی کردین چه فرقی داره ؟ نیاز به کد نویسی خاصی داره یا عین همونه؟
نقل قول: کند عمل کردن استیمول سافت در هنگام گزارش گیری
سلام
نکات رو آقای افراد فرمودند ، حالا اگر میخواید دقیقا همین کاری رو که انجام دادید ادامه بدید از این متد استفاده کنید (این رو بنده ننوشتم https://stackoverflow.com/questions/...nto-data-table)
public static DataTable ToDataTable<T>(List<T> items)
{
DataTable dataTable = new DataTable(typeof(T).Name);
//Get all the properties
PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in Props)
{
//Defining type of data column gives proper data table
var type = (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) ? Nullable.GetUnderlyingType(prop.PropertyType) : prop.PropertyType);
//Setting column names as Property names
dataTable.Columns.Add(prop.Name, type);
}
foreach (T item in items)
{
var values = new object[Props.Length];
for (int i = 0; i < Props.Length; i++)
{
//inserting property values to datatable rows
values[i] = Props[i].GetValue(item, null);
}
dataTable.Rows.Add(values);
}
//put a breakpoint here and check datatable
return dataTable;
}
کدتون به این شکل تغییر میکنه
StiReport report = new StiReport();
string fromDate = persianFromDate.Text;
string untilDate = persianUntilDate.Text;
int personelID;
int.TryParse(searchidreport.Text, out personelID);
var query = database.Tble_Attendance.SqlQuery("select * from Tble_Attendance where AttendanceID=@p0 AND AttendanceDate>=@p1 AND AttendanceDate<=@p2", personelID, fromDate, untilDate).ToList();
dataGridView1.DataSource = query;
report.Load(Application.StartupPath + @"\Report_Attendance.mrt");
report.RegData("reportAttendance", ToDataTable(query));
report.Compile();
report.Show();
نقل قول: کند عمل کردن استیمول سافت در هنگام گزارش گیری
واقعا سپاسگزارم از شما عزیزان
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
در گزارش، DataSource1 را حذف و یک BusinessObject ایجاد کنید با ستونهای مورد نظر. در برنامه به جای RegData از RegBusinessObject برای ارسال داده ها به گزارش استفاده کنید.
کوئری را هم میتونید به صورت linq بنویسید.
فقط جناب افراد حال که توانستیم مشکل رو با BusinessObject حل کنیم ایا امکانش هست توضیحی بدید که چرا این مشکل کندی در اون حالت رخ میداد؟
تفاوت دیتاسورس و BusinessObject در چی هستش؟
ایا اینکه درحالت کلی میتوان اینطور گفت:
اگر در دیتابیس جدول هایمان با هم ارتباطی ندارند > RegData و datasource
ولی اگر در دیتابیس جدول هایمان با همدیگر ارتباط دارند برای سرعت بیشتر از BusinessObject و RegBusinessObject استفاده کنیم؟
ایا این فرضیه درسته ؟