PDA

View Full Version : ابزارهای گزارشگیری در DevExpress



zahrasaffar
سه شنبه 23 مهر 1392, 13:11 عصر
سلام دوستان . کسی از ابزارهای گزارشگیری DevExpress استفاده کرده ؟ ممنون میشم اگه کمکم کنید و اگه میتونید یک نمونه طراحیش رو آموزش بدید
در ضمن من میخوام نوع گزارشگیری در برنامه به صورتی باشه که کاربر بتونه خودش انتخاب کنه که چه فیلد هایی رو تو گزارشش نشون بده .
نوع اتصال با بانک اطلاعاتی هم دربرنامم EntityFramework هست
با تشکر

khokhan
چهارشنبه 24 مهر 1392, 09:42 صبح
سلام دوستان . کسی از ابزارهای گزارشگیری DevExpress استفاده کرده ؟ ممنون میشم اگه کمکم کنید و اگه میتونید یک نمونه طراحیش رو آموزش بدید
در ضمن من میخوام نوع گزارشگیری در برنامه به صورتی باشه که کاربر بتونه خودش انتخاب کنه که چه فیلد هایی رو تو گزارشش نشون بده .
نوع اتصال با بانک اطلاعاتی هم دربرنامم EntityFramework هست
با تشکر
سلام
عرض شود خدمت باسعادتتون که قبل از هر کلامی بایستی بگم ........................خ خ خ خ خ خ خ .................:لبخند:
واما در مورد گزارش با DevExpress :

در پلت فرم winformبعد از اینکه زیر ساخت فرم رو از لحاظ ارتباط با منبع داده و سایر مخلفات برقرار ساختین از محل new itemمسیر پروژه کنترل مربوط به گزارشتون رو اضافه می فرمائید ::لبخند:
111913
بعد از اینکه کنترل مربوطه رو به پروژه تون اضافه نمودین رفرنس های مربوطه کنترل گزارش رو همراهی می کنند و لازم به اضافه کردن دستی نیست:لبخند:
در این مرحله با کلیک برروی کنترل مربوطه در solution explorer محیط دیزاین گزارش دراختیارتون قرار می گیره::لبخند:
در این حال از محل toolbox یک عدد کنترل bindingSourceبه گزارشتون اضافه نموده و ارتباط لازم با بانکتون رو از طریق این کنترل برقرار فرموده وتنظیمات خاصی هم نداره و از طریق پراپرتی مربوط به کنترل به راحتی می تونین این کار رو انجام بدین:لبخند:
111914

در این مرحله برای اینکه کنترل bindingSource در سمت پروژه هم قابل دست یابی باشه لازم هست تا ضمن باز کردن قسمت Designer.cs گزارشتون خاصیت کنترل bindingSource رو از privet به puplic تغییر بدین ::لبخند:
111915

در این مرحله با اختصاص کنترمناسب به گزارشتون مانند تیبل یا تکست باکس یا چارت و غیره از محل toolbox به کنترل bindingSource متصل می فرمائید ::لبخند:

111916

به فرض اگه از کنترل تیبل در گزارشتون استفاده فرمودید سلولهای تیبل رو یکی کی انتخاب و از آروی بالای گوشه سمت راست فیلدهای موجود در datasuorce مربوطهرا به هرکدوم نسبت می دین ::لبخند:
111919
پس از انجام مراحل فوق می تونین در سمت برنامه با نوشتن یک کوئری اطلاعات رو از بانک واکشی کنین و نتیجه کوئری رو به کنترل bindingSource موجود در سمت گزارشتون پاس بفرمائید ::لبخند:

khokhan
چهارشنبه 24 مهر 1392, 10:42 صبح
واما در سمت برنامه:
درسمت برنامه وقتی نتیجه کوئری رو در گرید مشاهده فرمودید ، در رویداد کلیک باتن مربوط به گزارش نیز همون کوئری رو قرار می دهید به عنوان مثال :

ostan36Entities2 context = new ostan36Entities2();
var query = from data in context.states
orderby data.id
select data;
ویااینکه می تونین یه دیتا تیبل از ستونها و ردیفهای گریدتون درست کنین و دیتاتیبل درست شده رو به گزارش پاس بدین :لبخند:
در هر صورت فرقی در اصل موضوع ایجاد نخواهد کرد

مرحله بعدی اینه که نتیجه کوری حاضر رو به کنترل bindingSource که در سمت گزارش ایجاد کرده بودیم پاس بدیم بنا براین ابتدا گزارش موجود در پروژه رو یک بار دیگه نمونه سازی کرده و به برنامه معرفی می کنیم ::لبخند:


XtraReport1 report = new XtraReport1();

بعد کنترل bindingSource موجود در گزارش رو نمونه سازی و معرفی می کنیم و اعلام می کنیم که منظور مون از این کنترل چیه :


BindingSource bs = (BindingSource)report.DataSource;

با انجام این کارها همه چیز آماده شده تا نتیجه کوری به دیتا سورس موجود درکنترل bindingSource اختصاص بدیم : :لبخند:


report.DataSource = ExamDetails;

ودر نهایت با یه جمله کوتاه گزارش رو فراخوانی کرده و مجبورش می کنیم تا خودشو نشون بده ::لبخند:


report.ShowPreviewDialog();

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


private void button1_Click(object sender, EventArgs e)
{
ostan36Entities2 context = new ostan36Entities2();
var query = from data in context.states
orderby data.id
select data;
XtraReport1 report = new XtraReport1();
BindingSource bs = (BindingSource)report.DataSource;
report.DataSource = query;
report.ShowPreviewDialog();
}

zahrasaffar
چهارشنبه 24 مهر 1392, 11:07 صبح
قبل از هر چیز تشکر فراوان که نگفتید ..........:لبخند:
من مراحل کار رو انجام دادم ولی نمیدونم چرا تو گزارش هیچی نمیاد .
این کدی هست که واسه ارسال اطلاعاتم نوشتم :
MashaghelDBEntities db = new MashaghelDBEntities();
var sel = from x in db.Amvals
join y in db.Amval_Type on x.A_Group equals y.A_Type_Code
select new {x.A_Name,x.A_Place,x.A_Price,x.A_Date,x.A_Aghsati ,y.A_Type_Name};

XtraReport1 rp = new XtraReport1();
rp.DataSource = sel;
rp.ShowPreview();

zahrasaffar
چهارشنبه 24 مهر 1392, 11:08 صبح
درضمن واسه اینکه مطمئن شم خروجی متغیر SEL درسته اونو به یه گرید ارسال کردم دیدم جواب میده . فقط نمیدونم چرا به گزارشه فرستاده نمیشه !!!!

khokhan
چهارشنبه 24 مهر 1392, 11:30 صبح
درضمن واسه اینکه مطمئن شم خروجی متغیر SEL درسته اونو به یه گرید ارسال کردم دیدم جواب میده . فقط نمیدونم چرا به گزارشه فرستاده نمیشه !!!!
مطمئن شوید که فیلدها رو حتما از کنترل BindingSource در کنترل موجود در گزارشتون افزوده باشین باز اگه درست نشد پروژه کامل رو براتون ارسال می کنم

khokhan
چهارشنبه 24 مهر 1392, 16:19 عصر
.................................................. .:لبخند:
روش دوم برای پاس دادن نتیجه کوئری به گزارش DevExpress :

در این روش بعد از اینکه اطلاعات رو از بانک فراخوانی کردیم نتیجه کوئری رو داخل متغیرهای یک کلاس می ریزم به فرض اگر کوئری ما شامل فیلدهایی به شرح ذیل باشد ::لبخند:

var query = from data in context.zirna
orderby data.ID
select new
{
data.ID,
data.num_post,
data.p_name,
data.Publication,
data.Returns,
data.seryal
};

کلاسی را که برای این منظور ترتیب می دهیم شامل متغیر های زیر خواهد بود ::لبخند:

namespace dev_report
{
public class Data
{
public Data()
{
}
private int _ID;
private int _num_post;
private string _p_name;
private string _Publication;
private int _Returns;
private int _seryal;
public int Id
{
get { return this._ID; }
set { this._ID = value; }
}
public int num_post
{
get { return this._num_post; }
set { this._num_post = value; }
}

public string p_name
{
get { return this._p_name; }
set { this._p_name = value; }
}
public string Publication
{
get { return this._Publication; }
set { this._Publication = value; }
}
public int Returns
{
get { return this._Returns; }
set { this._Returns = value; }
}
public int seryal
{
get { return this._seryal; }
set { this._seryal = value; }
}
}
}


بعد می رسیم سمت گزارش ::لبخند:

1 - در این سمت ابتدا یک سند گزارش خالی به پروژه اضافه می کنیم
2 - از بخش data درtoolbox یک عدد کنترل bindingSource به گزارشمون اضافه می کنیم
3 - قسمت دیتاسورس کنترل bindingSource مربوطه را از طریق انتخاب عامل object که به صورت ویزارد ارائه می شه به data که در سمت برنامه ایجاد کرده ایم متصل می کنیم
111927
4 بعد از این مرحله در سمت برنامه نتیجه کوئری رو به دیتاسورس این bindingSource پاس می دهیم


XtraReport1 report = new XtraReport1();
BindingSource bs = (BindingSource)report.DataSource;
report.DataSource = query;

report.ShowPreviewDialog();
البته بعد از اینکه یه کنترل توی گزارش قرار دادیم و فیلدهای دیتاسورس bindingSource رو به اون نسبت دادیم :لبخند:
111928

واین هم نتیجه کار :لبخند:
111929

واین هم خود پروژه با ef