View Full Version : مشکل در ارتباط DataGrid و CrystalReport
Gondolf
پنج شنبه 12 دی 1387, 22:17 عصر
با سلام دوستان من برای گزارش گیری یه مشکل دارم
فرض کنید مثلا در فرم 1 یه dataGrid دارم و یه دکمه چاپ
حالا می خوام اگر کاربر یه رکورد داخل dataGrid رو انتخاب کرد و دکمه چاپ رو زد فقط همون رکورد چاپ بشه
اگر هم هیچ رکوردی رو انتخای نکرده بود همه رکورد های داخل DataGrid چاپ بشه
اگه میشه از ابتدای تعریف CrystalReport بگید چون من تاحالا با این قابلیت کار نکردم
راستی چطور میشه نام ستون ها رو در crytal تغییر داد نمی خوام اسم ستون های داخل SQL رو چاپ کنه
با تشکر از همه اساتید برنامه نویس
alihassanabadi
شنبه 21 دی 1387, 11:07 صبح
دوست من سلام من چگونگی استفاده از کریستال ریپورت رو برات میگم وبعد مشکلت.
از قسمتsulotion روی نام پروژت راست کلیک کن و بعد این مراحل رو انجام بده
Add/New item/dataset.xsd
کلیک کن تا به پروژت اضا فه بشه بعد از اضافه شدن dataset.xds رویآن کلیک کن تا محیط مربوط به آن نمایانگر شود
بر روی صفحه باز شده راست کلیک کن و کزینه add/tableadapter رو انتخاب درضمن sql server رو باید نصب کرده باشی سپس در پنجره باز شده دکمه new connection رو بزن سپس microsoft sql server رو انتخاب کن دکمه continue رو بزن سپس در قسمت server name نام سرور sql رو وارد کن که معمولا local است سپس دکمه refresh رو بزن در قسمت select or enter a database name دیتا بیس رو انتخاب کن ok رو بزن سپس next بزن دوباره next بعد در پنجره tableadapter configure wizard دکمه query builder رو بزن سپس جدول دلخواه رو add کن دکمه close روبزن میبینی که در پنجره query builder نام جدول اضافه شده وجود داره که باید *(All Cloumsn) رو تیک بزنی ok رو بزن سپس دوبار next رو بزن بعد روی finish کلیک کن.
حالا به فرم یک دیتا گرید ویو ویک باتون و یک کریستال ریپورت اضافه کن.
حال از گوشه سمت راست بالای کریستال ریپورت مثلث کوچک را بزن و بعد creat a new crystal report سپس ok شکل رو انتخاب کن ok را بزن سپس میبینی که در پنجره باز شدهado.Net datasets وجود دارد از این مسیر جدولت رو انتخاب کن بعد دکمه> رو بزن بر روی next کلیک کن دوبره از پنجره ای که میبینی که جدول انتخاب شده است دکمه>> رو بزن تا فیلدها به قسمت fields to disply اضافه شن سپس سه بار next رو بزن و در پایان finish روبزن میبینی که تمام فیلد ها به crystalreport.rpt اضافه شده اند
حالا مونده انتخاب سلول از روی دیتا گرید ویو و گزارش آن بدیهی که بعد از گزارش گیری خود کریستال ریپورت دکمه پرینت داره
حالا این کد رو تو رویداد فرم لود بنویس
برای استفاده از دستورات sql server 2000 باید فایل سرآمد Using System.Data.Sqlclient; رابه برنامه اضافه کنی
SqlDataAdapter adapter2 = new SqlDataAdapter("select *from [tblname", "Data Source=(local);Initial Catalog=databasename;Integrated Security=True");
DataSet dataset1 = new DataSet();
adapter2.Fill(dataset1, "tblname");
BindingSource bs = new BindingSource(dataset1, "tblname");
dataGridView1.DataSource = bs;
یادت باشه databasename نام پایگاه دادته که در اس کیو ال سرور ساختی , tblname نام جدول
حال یه متغییر عمومی از نوع string تعریف کن و مقدارشو تهی بذار
public string str="";
بعد داخل رویداد کلیک دیتا گرید این کد رو بنویس
این کد به کاربر اجازه نمیده بیش از یک سلول یا رکورد را انتخاب کند
private void dataGridView1_Click(object sender, EventArgs e)
{
int i = dataGridView1.SelectedCells[0].RowIndex;
int j = dataGridView1.Rows.Count;
if (dataGridView1.SelectedCells.Count > 0 && i != j - 1)
{
str = dataGridView1.Rows[i].Cells[0].Value.ToString();
}
else
{
MessageBox.Show("شما مجاز به انتخاب همه رکوردها نمی باشید", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
و در آخر داخل کلیک دکمه گزارش این کد رو بنویس
private void button1_Click(object sender, EventArgs e)
{
if (str == "")
{
SqlDataAdapter ad;
SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=databasename;Integrated Security=True");
ad = new SqlDataAdapter("select * from tblname", con);
DataSet da = new DataSet();
CrystalReport1 re = new CrystalReport1();
con.Open();
ad.Fill(da, "tblname");
con.Close();
re.SetDataSource(da);
//b.SetDataSource(n);
this.crystalReportViewer1.ReportSource = re;
}
else
{
SqlDataAdapter ad;
SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=databasename;Integrated Security=True");
ad = new SqlDataAdapter("select * from tblname where id='"+str.ToString()+"'", con);
DataSet da = new DataSet();
CrystalReport1 re = new CrystalReport1();
con.Open();
ad.Fill(da, "tblname");
con.Close();
re.SetDataSource(da);
//b.SetDataSource(n);
this.crystalReportViewer1.ReportSource = re;
;"str="
}
}
اگه میخوی نام ستونها نمایش داده نشن از crystal.rpt از هر فیلد دو اسم میبینی یا دو لیبل, لیبلها رو در قسمت section2(page header) حذف کن و به جاش از toolbax .....textobjectرو انتخاب کن حال میتونی داخل تکست ابجکتها بنویسی این کار رو نمیتونی از قسمت پراپرتیس انجام بدی همون لحظه که textobject رو توی crystal.rpt میندازی داخلش میتونی بنویسی
یادت باشه من این برنامه رو نوشتم وبا sql server 2000 تستش کردم جواب داده
در ضمن service manager مربوط به اس کیو ال باید start باشه
دوست خوب اگه تمام مراحل رو دقیق بری برنامه حتما کار میکنه
دیگه بقیش بستگی به خودت داره
با تشکر
Ali_Aorta@yahoo.com
alihassanabadi
جمعه 04 بهمن 1387, 00:52 صبح
سلام
مشکلت حل نشد؟:شیطان:
juve2008
پنج شنبه 21 آبان 1388, 10:04 صبح
دستت درد نكنه
shima_85
چهارشنبه 04 آذر 1388, 20:09 عصر
من این کدارو نوشتن ولی موقع اجرا ،هیچ رکوردی را در reportViewer نشون نداد ،و خطایی هم داد که dataTable1 را پیدا نمیکنم.در صورتیکه من اصلا dataTableندارم.چرا؟
safaie
یک شنبه 08 آذر 1388, 22:45 عصر
با سلام دوستان من برای گزارش گیری یه مشکل دارم
فرض کنید مثلا در فرم 1 یه dataGrid دارم و یه دکمه چاپ
حالا می خوام اگر کاربر یه رکورد داخل dataGrid رو انتخاب کرد و دکمه چاپ رو زد فقط همون رکورد چاپ بشه
اگر هم هیچ رکوردی رو انتخای نکرده بود همه رکورد های داخل DataGrid چاپ بشه
اگه میشه از ابتدای تعریف CrystalReport بگید چون من تاحالا با این قابلیت کار نکردم
راستی چطور میشه نام ستون ها رو در crytal تغییر داد نمی خوام اسم ستون های داخل SQL رو چاپ کنه
با تشکر از همه اساتید برنامه نویس
دوست عزيز شما مي توانيد اين كار را به راحتي با store prcedure در sql انجام دهيد به اين ترتيب كه procedure مورد نظر را تعريف كرده و در هنگام ساختن كريستال ريپورت به پروسيجر مربوطه وصل شوبد در مورد انتخاب ركورد هم از
string ID = "";
ID = dataGridView2.SelectedCells[0].Value.ToString();
textacount.Text = ID;
استفاده كنيد تا ركورد مورد نظر انتخاب شود البته در خاصيت دبل كليك ديتاگريد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.