PDA

View Full Version : سوال: گزارش گیری از چند تا جدول با view و کریستال ؟



Fartaj
یک شنبه 09 مهر 1391, 16:14 عصر
سلام

من می خوام از چند تا جدول که کلید مشترک دارند با کریستال پرینت بگیرم تو جستجو هام گفته بودند view درست کن ، view رو درست کردم بعد وصلش کردم به dataset و کریستال رو هم وصل کردم به dataset الان فرم آماده است اما برای پرینت باید یک id بفرستم تا براساس اون اطلاعاتی از view رو که این id رو دارن چاپ بشه نمی دونم بقیش رو چی کار کنم ؟

Farshid007
یک شنبه 09 مهر 1391, 16:25 عصر
کلا بی خیال کریستال ریپورت شو
بزن تو Fast Report

Fartaj
یک شنبه 09 مهر 1391, 18:29 عصر
آخه فرم ها رو با هزار بدبختی آماده کردم تو کریستال ؟

Mahmoud Zaad
یک شنبه 09 مهر 1391, 18:46 عصر
سلام
این نمونه رو ببینید سوالی بود من در خدمتم.

Fartaj
یک شنبه 09 مهر 1391, 19:04 عصر
ممنون دوس عزیز ولی من vs2010 دارم

باز نشد

Mahmoud Zaad
یک شنبه 09 مهر 1391, 19:09 عصر
چه خطایی داد؟ اینو با 2008 نوشتم باید باز بشه.
-----------------------------
دوستان دیگه تست کردن؟
شما که عقب نشستی، مشکل داره؟!!!!

Fartaj
یک شنبه 09 مهر 1391, 19:28 عصر
شرمنده باز شد :خجالت:

فقط یک سوال من می خوام از view اطلاعات رو select کنم دستور select اون مثل بقیه است ؟؟

Mahmoud Zaad
یک شنبه 09 مهر 1391, 19:41 عصر
نگفتید چه خطایی داد. پروژه کلاً باز نشد یا برنامه اجرا نشد؟

کوئری تون رو که از همون view میگیرید (فایل اکسس رو ببینید) منتها توی دیتاست باید یه TableAdapter اضافه کنید که می تونید همون ویویی که توی sql یا اکسس ساختید رو بهش معرفی کنید که در آخر یه دیتا تیبل بهتون میده بقیه شم مثل سابقه، کدهای این پروژه به شکل زیره:

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\db.accdb");

OleDbDataAdapter da = new OleDbDataAdapter("SELECT Student.ID, Student.stName, Student.stFamily, Student.vorod, Dars.dName, Nomre.Nomre FROM Student RIGHT JOIN (Dars RIGHT JOIN Nomre ON Dars.ID = Nomre.DarsID) ON Student.ID = Nomre.stID WHERE Student.ID=@p1", con);
da.SelectCommand.Parameters.AddWithValue("@p1", txtID.Text);

DataSet DataSet1 = new DataSet();

DataTable DataTable4 = new DataTable();
da.Fill(DataSet1, "DataTable4");

dataGridView1.DataSource = DataSet1;
dataGridView1.DataMember = "DataTable4";

//Normal Report
//CrystalReport1 myrpt = new CrystalReport1();

//Grouping Report
CrystalReport2 myrpt = new CrystalReport2();

myrpt.SetDataSource(DataSet1);

crystalReportViewer1.ReportSource = myrpt;

Fartaj
یک شنبه 09 مهر 1391, 20:10 عصر
خطایی نداشت درست باز شد !

اما هر کاری کردم درست نشد :

این کدهای منه : group1 همون ویویی که ساختم



CR_delay_absence rpt = new CR_delay_absence();
SqlConnection con = new SqlConnection();
DataSet studentsDataSet = new DataSet();

SqlDataAdapter da = new SqlDataAdapter("SELECT group1.Family, group1.Name WHERE group1.St_Id=@id", con);
da.SelectCommand.Parameters.AddWithValue("@id", int.Parse(lblid.Text));

DataTable dt = new DataTable();

da.Fill(studentsDataSet, "dt");


frm_rpt_delay_absence rptdelay = new frm_rpt_delay_absence();
rpt.SetDataSource(studentsDataSet);

rptdelay.ShowDialog();






CR_delay_absence rpt = new CR_delay_absence();
cRViewer1.ReportSource = rpt;
cRViewer1.Zoom(100);
cRViewer1.ReportSource = rpt;

Fartaj
دوشنبه 10 مهر 1391, 21:59 عصر
ببینید دوستان من یک همچین فرمی رو باکریستال طراحی کردم :
93464

من می خوام اطلاعات دانش آموز + تاخیر ها و غیبت های اون چاپ بشه

اومدم یک view از سه تا جدول درست کردم

و ای کد رو گزاشتم :


DC_linqDataContext My_L = new DC_linqDataContext();
CR_delay_absence rpt = new CR_delay_absence();
var data = My_L.SP_select_group1byid(int.Parse(lblid.Text));
rpt.SetDataSource(data);

frm_rpt_delay_absence rptdelay = new frm_rpt_delay_absence();
rpt.Load("CR_delay_absence");
rptdelay.cRViewer1.ReportSource = rpt;
rptdelay.ShowDialog();


اما به محض زدن دکمه پرینت صفحه بسته می شه و فرم پرینت باز نمی شه

از دوستان خواهش می کنم اگر می تونن کمک کنن خیلی گیر کردم

omidamiry
دوشنبه 10 مهر 1391, 22:16 عصر
حالا فیلتر کن بعدشم سخت گرفتی یه سر بزن به amiry20.blogsky.com

Fartaj
پنج شنبه 13 مهر 1391, 11:22 صبح
دوستان کد گزارش گیری من به اینجا رسید که من view رو به dataset اضافه کردم بعد تو dataset تو tableadapter مربوط به view یک فیلتر گزاشتم و preview data رو زدم چک کردم درست بود

93545
بعد اودم تو فرمی که دکمه پرینت زده می شه یک نمونه از شی dataset و یک نمونه از tableadapter گزاشتم و این کد روهم نوشتم :




CR_delay_absence rpt = new CR_delay_absence();
frm_rpt_delay_absence frmdelay = new frm_rpt_delay_absence();

studentsDataSet ds = new studentsDataSet();
studentsDataSet.group1DataTable dtg = new studentsDataSet.group1DataTable();
DataTable dt = new DataTable();
dt.Columns.Add("Family");
dt.Columns.Add("Name");
dt.Columns.Add("Code_Melli");
dt.Columns.Add("F_Name");
dt.Columns.Add("Class_Id");
dt.Columns.Add("F_Ed_Level");
dt.Columns.Add("F_Job");
dt.Columns.Add("F_Job_Tel");
dt.Columns.Add("m_job");
studentsDataSetTableAdapters.group1TableAdapter dts = new studentsDataSetTableAdapters.group1TableAdapter();
dts.Fill(dtg, int.Parse(lblid.Text));
dts.CopyToDataTable(dt, LoadOption.OverwriteChanges);
rpt.SetDataSource(dt);

frmdelay.crystalReportViewer1.ReportSource = rpt;

frmdelay.ShowDialog();


اما باز هم دکمه پرینت زده می شه فرم بسته می شه و هیچ گزارشی رو نشون نمی ده ؟

و اینکه به CopyToDataTable ایراد می گیره و ارور می ده ؟

Mahmoud Zaad
پنج شنبه 13 مهر 1391, 20:00 عصر
من که متوجه نشدم مشکل نمونه ای که قرار دادم چی بود؟ ولی به نظرم یه سری از کدهای شما اضافه هستند این نمونه (http://barnamenevis.org/showthread.php?323878-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%DA%86%D9%86%D8%AF-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D8%A8%D9%87-%DA%A9%D8%B1%DB%8C%D8%B3%D8%AA%D8%A7%D9%84-%D8%B1%D9%BE%D9%88%D8%B1%D8%AA-%D9%88%DB%8C%DA%98%D9%88%D8%A7%D9%84-%D8%A7%D8%B3%D8%AA%D9%88%D8%AF%DB%8C%D9%88-2010&highlight=%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8% B1) رو ببینید. طریقه نوشتن کدها در مورد کار شما با سایر موارد فرقی نمی کنه. (در ضمن این نمونه جدیده سالمه، مال یه خانم دکتر بوده فقط هر روز صبح یه بار نگاش میکرده!) اگه نشد این قسمت از پروژه تون رو اینجا قرار بدید تا یه فکری براش بکنیم!

roolinjax
جمعه 14 مهر 1391, 19:19 عصر
سلام
شما چرا اینقدر خودتونو می پیچونید ؟
خوب یه ویو مگه نساختین با اسم group1 ؟ مگه این ویو یه فیلد به نام id نداره ؟
خوب اگه داره این خط میشه دستور select شما :
select * from group1 where id ='value'
بقیه خطوط رو خودتون بهش اضافه کنین.
چیز زیادی ننویسی که خروجی نمی گیریا ، فقط یه ارتباط با دیتابیس بزن و یه command و یه dataadaptor می خواید.

Fartaj
جمعه 14 مهر 1391, 19:57 عصر
آخه دوست عزیز من می خوام اطلاعات دانش آموز انتخاب شده + تمام غیبت ها + تمام تاخیرها یعنی کار با یک سطر نیست نباید با datatable کار کنم ؟ فقط چیزی که هست انگار یک datarow جا انداختم

abcd_a
شنبه 15 مهر 1391, 08:48 صبح
سلام
قبلا یکی از دوستان یه سوال در مودر کار با ویو در کرستال ریپورت پرسیده بودند من این مثال براشون نوشتم
بینید می تونه کمک تون کنه یا اینکه بر حسب نیاز تون تغییرش بدید

http://barnamenevis.org/showthread.php?361220-%28-_-%29-%DA%AF%D8%B2%D8%A7%D8%B4-%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%DA%86%D9%86%D8%AF-%D8%AC%D8%AF%D9%88%D9%84-%D8%A8%D8%A7-%DA%A9%D8%B1%DB%8C%D8%B3%D8%AA%D8%A7%D9%84-%D8%B1%DB%8C%D9%BE%D9%88%D8%B1%D8%AA-%D8%9F%D8%9F%D8%9F&p=1595688#post1595688

malihehshajari
شنبه 15 مهر 1391, 09:18 صبح
فکر کنم منظورتون این باشه

DataTable dt611 = connection.gettable1("select * from client ");
DataTable dt11 = connection.gettable1("SELECT * from report where code_print='" + dt611.Rows[dt611.Rows.Count - 1].ItemArray[3] + "'");
ReportDocument rd = new ReportDocument();
string p = Application.StartupPath + @"\\CrystalReport1.rpt";
rd.Load(p);

rd.SetDataSource(dt11);
DataTable dt012 = connection.gettable1("select * from count_gharardad");
rd.SetParameterValue("t", dt012.Rows[0].ItemArray[0].ToString());
rd.PrintToPrinter(1, true, 1, 1);
این کد رو من از برنامه خودم براتون گذاشتم امیدوارم مشکلتون حل بشه