PDA

View Full Version : مبتدی: گزارش گیریstimulreport با استفاده از کوئری خاص در LINQ



vbiman
چهارشنبه 27 مهر 1390, 21:59 عصر
سلام
من با استفاده از stimulreport می خوام گزارش بگیرم و دسترسی به داده ها هم از طریق LINQ انجام میشه حالا از اطلاعات بانکم می تونم گزارش بگیرم ولی اگه بخوام از یک query خاص گزارش بگیرم نمیشه، پروژه را می ذارم ببینید میشه جوری تغییرش بدین که برای مثلا افرادی که سن (فیلدی به نام AGE)آنها کمتر 20 سال است در گزارش بیاید؟

http://up8.iranblog.com/images/ft6kwrsopwwd3wijrik.rar

sanay_esh
پنج شنبه 28 مهر 1390, 00:32 صبح
سلام
در اینجا اصلا نیازی نیست که از دیتاست استفاده کنی
میتونی بدین شکل عمل کنی ( من کمی تغییرات دادم و بجای سورس برنامه کدش رو میذارم ببین کمی کمکت میکنه !)
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'dSReport.Person' table. You can move, or remove it, as needed.

var all = from p in db.Person1s
select p;
dataGridView1.DataSource = all.ToList();

}

private void btnReport_Click(object sender, EventArgs e)
{
var r = from p in db.Person1s
where p.Age < 20
select p;
dataGridView1.DataSource = r.ToList();


}

sanay_esh
پنج شنبه 28 مهر 1390, 01:14 صبح
اینم نحوه ارسال گزارش به استیمال ریپورت
person1TableAdapter1.Fill(ds.Person1);

DataTable T = ds.Tables["Person1"];


IEnumerable<DataRow> query = from r in T.AsEnumerable()
where r.Field<int>("Age") < 20
select r;


DataTable Report = query.CopyToDataTable();



stiReport1.RegData(Report);
stiReport1.Show();

vbiman
پنج شنبه 28 مهر 1390, 14:35 عصر
در اینجا ds چیه؟ همون data context هست یا اینجا ds اسم DataSet هستش ؟
در ضمن شی TableAdapter کی به Toolbax اضافه می شه چون به صورت پیش فرش در toolbax نیستش؟

vbiman
جمعه 29 مهر 1390, 21:08 عصر
جان من یکی بگه این ds چیه؟ر:گریه:

sanay_esh
جمعه 29 مهر 1390, 21:21 عصر
این همون دیتاستی هست که خودت داری دیگه عزیزم چرا کمی به خودت فوشارررر نمیاری!!!

vbiman
شنبه 30 مهر 1390, 00:11 صبح
یک مشکل عجیب برخوردم که خوشبختانه حل شد فقط برنامه خطا میگیره به این خط:
http://up1.iranblog.com/images/xhxewr5bq8f7kdmao34.png
من در بانکم فیلد Age نوعشو nchar تعریف کردم در حالی که در این خط int آمدم به جای string ، int گذاشتم و عدد 20 هم به صورت "20" نوشتم ولی هنوز همون خطا رو میده آیا برای رشته باید متد خاصی بنویسم؟
این خط در صورتی که فیلد Age رشته باشه باید چه تغییری باید بکنه ؟
IEnumerable<DataRow> query = from r in T.AsEnumerable()
where r.Field<int>("Age") < 20
select r;

vbiman
شنبه 30 مهر 1390, 00:30 صبح
راستی در مورد این IEnumerable و AsEnumerable یه توضیح کوچیک میدی که اینا چی هستن و برای چه کاری استفاده میشن؟

R_Rajaee_Rad
جمعه 30 دی 1390, 10:36 صبح
private void button1_Click(object sender, EventArgs e)
{

custTableAdapter dt = new custTableAdapter();
DataSet1 ds1=new DataSet1();
dt.Fill(ds1.cust);

DataTable T = ds1.Tables["Cust"];
IEnumerable<DataRow> query=( from r in T.AsEnumerable()
where r.Field <int>("id") == 5
select r).ToList();
DataTable Report = query.CopyToDataTable();
stiReport1.Load(@"e:\stireport1.mrt");
stiReport1.RegData(Report);
stiReport1.Compile();
stiReport1.Render();
stiReport1.Show();
}

سلام...
من این کدها رو نوشتم....
اما موقعی که گزارش رو نشون میده...کل جدول رو میاره...اصلا کوئری ارا نمیشه!!
کسی میدونه مشکلش چیه؟؟

R_Rajaee_Rad
جمعه 30 دی 1390, 20:31 عصر
یعنی کسی از اساتید نیست با linq کوئری بگیره و همون کوئری رو با استیمول به صورت گزارش دربیاره؟

vbiman
دوشنبه 03 بهمن 1390, 10:34 صبح
من بعد از کلی گشتن و دیدن کد های مختلف سرانجام این کد رو نوشتم که گزارش گیری میکنه و هر شرطی رو که بخوای می تونی روش اعمال کنی و به استیمول بفرستی.
private void btChap_Click(object sender, EventArgs e)
{
var time = DateTime.Now;
stiReport1.Dictionary.Variables["Time"].Value= Convert.ToString(time.ToShortTimeString());
stiReport1.Dictionary.Variables["Date"].Value = lbDateNow.Text;
dSrep1.ExOutput.Rows.Clear();
var query = from c in db.ExOutputs
where c.OutputDate.CompareTo(Dback)>=0 && c.OutputDate.CompareTo(Dnow)<=0
select c;
foreach (var Ex in query)
{
DSrep.ExOutputRow ExOutput = dSrep1.ExOutput.NewExOutputRow();
ExOutput.OutputID = Ex.OutputID;
ExOutput.OutputType = Ex.OutputType;
ExOutput.OutputPrice = Ex.OutputPrice;
ExOutput.OutputComment = Ex.OutputComment;
ExOutput.OutputDate = Ex.OutputDate;
dSrep1.ExOutput.AddExOutputRow(ExOutput);

}
stiReport1.RegData(dSrep1);
stiReport1.Compile();
stiReport1.Render();
stiReport1.Show();

}

R_Rajaee_Rad
سه شنبه 04 بهمن 1390, 20:15 عصر
آقا دمت گرم...
من این کدها رو نوشتم ...اما بازم همه رو چاپ کرد....
MainDataContext db = new MainDataContext();
DsCust ds = new DsCust();
ds.Customer.Rows.Clear();
var query = from c in db.Customers
where c.id== 4
select c;

foreach (var Ex in query)
{
DsCust.CustomerRow Customer = ds.Customer.NewCustomerRow();
Customer.id = Ex.id ;
Customer.family = Ex.family ;
Customer.tell = Ex.tell;
Customer.tell2 = Ex.tell2 ;
Customer.address = Ex.address ;
Customer.date = Ex.date;
ds.Customer.AddCustomerRow(Customer);

}
stiReport1.RegData(ds);
stiReport1.Compile();
stiReport1.Render();
stiReport1.Show();
}
فقط یه نکته من مثل شما متغیر به استیمول نفرستادم.....چون اگر اونجوری باشه بدون این که بخوام به بانک وصل بشم و از دیتاست استفاده کنم...با 3 خط میتونم نتیجه بگیرم! یه متغیر به نام var توی استیمول تعریف کردم... که از کاربر یه عدد میگیره و گزارش رو برحسب اون شماره نمایش میده!اما من میخوام به صورت کوئری های linq از برنامه گزارش بگیرم....مثل شما... اینم کدهایی که گفتم....
stiReport1.Load(@"e:\Stireport1.mrt");

stiReport1.Compile();
stiReport1["var"] = "where id='" + textBox1.Text + "'";
stiReport1.Show();


اینجوری متغیر var رو توی استیمول تعریف کردم....

vbiman
شنبه 08 بهمن 1390, 11:00 صبح
سلام ببخشید دیر جواب دادم
اول اینکه من دو متغیری رو که فرستادم به استیمول حاوی زمان و تاریخ هست که فرستادنشون اختیاری است.
دوم اینکه من فکر کنم مشکل در قسمت Design گزارش هست شما بیا اول یک connection درست کن بعد هم یک DataSorce جدید ایجاد کن و تمام فیلد هایی رو که می خوای در گزارش بیاد تعریف کن دقیقا همان طور که در بانکت تعریف کردی. بعد از این کار حالا همین فیلد ها رو روی صفحه گزارشت بذار و کد نوسی داخل برنامه هم همونی که گذاشتم رو بنویس .

http://up4.iranblog.com/images/30137400081493054257.png

R_Rajaee_Rad
شنبه 08 بهمن 1390, 18:29 عصر
دوست عزیز متشکر مشکلم حل شد....
من باید توی دیزاین --دیتاسورس رو دیتاست برنامه(در اینجا ds) تعیین میکردم...که من اشتباهی میرفتم جدول بانک اصلی رو انتخاب میکردم
خب حالا یه سوال بچگانه!
حالا که گزارش ما میاد رو مانیتور-- چه طوری اونو پرینت بگیریم؟؟ یعنی خودکار این گزارش در یک اندازه دلخواه و تعیین شده-توسط چاپگر-چاپ بشه؟