PDA

View Full Version : استفاده از فیلد های دو جدول برای نمایش در کریستال ریپورت



RIG000
جمعه 19 فروردین 1390, 00:41 صبح
دوستان عزیز من ممنون میشم منو راهنمایی کنید . ببینید من میخام که به طور مثال 3 فیلد از جدول 1 و 5 فیلد از جدول 2 به کریستال ریپورت اضافه کنم . یه دیتاست درست کردم با دو تا دیتا تیبل در داخلش که یکی از دیتاتیبل هابه جدول1 و دومی نیز به جدول 2 و حالا این کد ها رو نوشتم . (در ضمن با یک جدول مشکلی ندارم اما دو جدول رو گیر کردم.) البته من این کدی که نوشتم نمی دونم دزسته یا نه اما همینو نوشتم . در ضمن در مورد دیتاست و دیتا تیبل اصلا میشه اینکارو برای دوجدول انجام داد یا روش دیگری داره واین کارم درست نیست.
string connectionString = String.Format(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\mydb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

using (DataSet2 DS2 = new DataSet2())
{
DS2.Clear();
SqlConnection connection1 = new SqlConnection();
using (SqlDataAdapter adapter1 = new SqlDataAdapter())
{

connection1.ConnectionString = connectionString;
adapter1.SelectCommand = new SqlCommand();
adapter1.SelectCommand.Connection = connection1;
adapter1.SelectCommand.CommandText = "SELECT * FROM tbl1,tbl2";
adapter1.SelectCommand.CommandType = CommandType.Text;
adapter1.Fill(DS2, "tbl1");
adapter1.Fill(DS2, "tbl2");
}
CrystalReport21.SetDataSource(DS2.Tables["tbl1"]);
CrystalReport21.SetDataSource(DS2.Tables["tbl2"]);

}
crystalReportViewer1.ReportSource = CrystalReport21;

RIG000
جمعه 19 فروردین 1390, 04:27 صبح
میشه یه کمکی کنید . در این مورد کسی اطلاعایی نداره ؟

RIG000
جمعه 19 فروردین 1390, 13:10 عصر
کسی نبود؟..................

hossein2007
جمعه 19 فروردین 1390, 13:16 عصر
برای اینکار حتما باید اول در دیتابیس یک view کنی که فیلد های مورد نظرت (از دو جدول) رو داشته باشه.
سپس با اون view مثل یه جدول می تونی کار کنی.

RIG000
جمعه 19 فروردین 1390, 13:25 عصر
یعنی اینه تو فرم لود کریستال ریپورت ویور دوتا table رو select کنم . بعدا" این کد هام جواب میده . الان این کد ها درسته؟؟؟؟؟؟؟؟؟؟؟؟

RIG000
جمعه 19 فروردین 1390, 14:14 عصر
برای اینکار حتما باید اول در دیتابیس یک view کنی که فیلد های مورد نظرت (از دو جدول) رو داشته باشه.
سپس با اون view مثل یه جدول می تونی کار کنی.
خب من بالا همین کارو کردم دیگه!!!!!

morteza271
جمعه 19 فروردین 1390, 14:30 عصر
دوست عزیز چرا در کدتون از دوتا table استفاده کردین در صورتی که کوئری شما یه جدول میده ولی شما نوشتین:

adapter1.Fill(DS2, "tbl1"); adapter1.Fill(DS2, "tbl2");
}
CrystalReport21.SetDataSource(DS2.Tables["tbl1"]);
CrystalReport21.SetDataSource(DS2.Tables["tbl2"]);

نتیجه کوئری شما

adapter1.SelectCommand.CommandText = "SELECT * FROM tbl1,tbl2";
یه دونه جدول هست.
با استفاده از همین کوئری(یا هر گوئری دیگه) میتونی اطلاعات رو از دو جدول به گزارشت انتقال بدی.
موفق باشی

RIG000
جمعه 19 فروردین 1390, 15:19 عصر
راستش نفهمیدم منظورتونو اینو میدونم که select میکنه
adapter1.SelectCommand.CommandText = "SELECT * FROM tbl1,tbl2";
اما چه جوری tbl1 و tble2 رو به CrystalReport21 ست کنم . اگه میشه کدمو تغییر بدین. یه بار دیگه بگم بهتره . دوست من من تو dataset دو تا datatable دارم .
میخام هردو رو بکشم بیرون اما
adapter1.Fill(DS2, "tbl1"); adapter1.Fill(DS2, "tbl2");
}
CrystalReport21.SetDataSource(DS2.Tables["tbl1"]);
CrystalReport21.SetDataSource(DS2.Tables["tbl2"]);

چه جوری بنویسم تا دوتا جدولمم خونده بشه . اگه میشه کلا" کد رو تغییر بدین . ببینم چه شکلی میشه . واقعا"معذرت میخام که انقدر مزاحم میشم .

morteza271
جمعه 19 فروردین 1390, 15:25 عصر
راستش من با کریستال کار نکردم ولی تا جایی که میدونم خیلی راحت میشه کل دیتاست رو به کریستال متصل کنی و از داخل اون میتونی جدول هاتو انتخاب کنی!بیشتر از این دیگه نمیدونم.
توی گوگل سرچ کن آموزش کریستال زیاد هست.
موفق باشی

حالا من یه سوال از شما دارم:
آیا کریستال ریپورت حالت End User داره یا نه؟

RIG000
جمعه 19 فروردین 1390, 15:47 عصر
منظورتو از end user نفهمیدم. من کلا کار میکنم با این کریستال اینها . حالا اگه بشه end user رو تشریح کنی که ...

morteza271
جمعه 19 فروردین 1390, 16:13 عصر
یعنی اینکه تهیه گزارش رو بسپاری دست کاربری که از برنامه استفاده میکنه.
یعنی خودم یه صفحه گزارش درست کنم و وقتی کاربر یه دکمه رو میزنه اونه صفحه رو باز کنه و کاربر بتونه تغییرش بده و سپس چاپش کنه،همین.
میشه یا نه؟

RIG000
جمعه 19 فروردین 1390, 16:19 عصر
منظورت اینه که تعداد فیلد مثل id ,name ,family رو پیش فرض داری و میخای کاربر پیش فرض اینو داشته باشه و اگه دوست داشت name,family رو پرینت بگیره؟ مثلا" دیگه id رو دیگه پرینت نگیره

RIG000
شنبه 20 فروردین 1390, 05:48 صبح
بچه کسی نتونست کمکی بهم کنه؟

sarbaz_esf
شنبه 20 فروردین 1390, 10:23 صبح
دوست عزیز باید در دستور select ای که نوشتی نام فیلد های مورد نظر جدول 1 و جدول 2 را هم می نوشتی
مثل دستور زیر
"SELECT tbl1.name,tbl1.family,tbl2.code, tbl2.name,tbl2.tedad,tbl2.vazn,tbl2.ghemat FROM tbl1 CROSS JOIN tbl2"
موفق باشی

RIG000
شنبه 20 فروردین 1390, 12:54 عصر
دوست عزیز میشه یه نمونه کار بهم بدین این موضوع حل بشو نیست فکر کنم

mn_zandy63
یک شنبه 21 فروردین 1390, 01:12 صبح
سلام دوست من،
شما اول بیا و دقیق بگو میخوای چی نشون بدی.
یعنی نمونه اطلاعاتی که داخل هر کدوم از جداولت هست رو بنویس. بعد رو یه کاغذ یه شکل از گزارشت بکش که دقیقا چی میخوای. بعد بهت میگم چیکار کنی.
در مورد کدی که نوشتی یه توضیح کوچیک میدم. ببین دوست من، وقتی که یه دونه Select نوشتی، حالا توش ۲ تا جدول رو inner join کردی یا ۱۰۰ تا رو فرق نمیکنه، خروجی این دستور یه جدوله با ترکیبی از ستونهای جداولی که داخل Select آوردی.
بنابراین اونجا که دو تا table رو با dataadapter پر کردی اشتباهه. در واقع در عمل هر دو تا جدول یکیه محتواشون. بنابراین فقط یه دونه datatable رو پر کنی کافیه و نیاز به دو تا نیست. البته باید توضیح بدم که یه راه دیگه هم هست که به جای اینکه اینجا Inner join کنی، میتونستی دو تا دستور select بنویسی که هر کدوم فقط یکی از دو تا table رو select کنه اونوقت باید هر کدوم از select ها رو برمیداشتی میریختی داخل یه datatable جدا.
اینکه از کدوم روش استفاده کنی بستگی به شرایط داره. که اون رو هم اول باید کاری که تو خط اول گفتم انجام بدی. بنابراین فعلا اینارو ولش کن. برگرد سر اون خط اول که بهت گفتم. هر وقت کشیدیش بیا اینجا توضیح بده که میخوای باهاش چیکار کنی.
موفق باشی

RIG000
یک شنبه 21 فروردین 1390, 21:36 عصر
ببینید من دو تا جدول دارم که هر کدوم 3 تا فیلد دارن تو هر کدوم از این دو جدول یک فیلد داریم که بهم Relation شدن و کلید خارجی هستن . به طو مثال فیلد IdCode nدر جدول1 با IdCode در جدول2 . حالا میخام یه جوری quqery بنویسم که اطلاعات دو جدول رو با در نظر گرفتن این فیلد خارجی که دو تا جدول رو بهم ربط داده مقدارهای هر دو جدول رو بکشم بیرون و تو کریستال ریپورت نشون بدم . این کل کاریه که من میخام بکنم .
از شما ممنونم دوست عزیز که تو جه کردین

hossein2007
یک شنبه 21 فروردین 1390, 23:17 عصر
یعنی اینه تو فرم لود کریستال ریپورت ویور دوتا table رو select کنم . بعدا" این کد هام جواب میده . الان این کد ها درسته؟؟؟؟؟؟؟؟؟؟؟؟

دوست عزیز منظورم اینه که توی محیط sql server یک view کن.(زیر همون جایی که Table ها رو می سازی)

RIG000
چهارشنبه 24 فروردین 1390, 19:09 عصر
یچه ها من نتونستم دو تا جدول رو باهم اخرش تو Crystal نشون بدم . اخرش یه نمونه گذاشتم که کار هاش انجام شده فقط دوستان کسی می تونه این قسمتش رو تنظیم کنه . ممنون میشم . هر جور relation زدم نشد تدو table رو تو یه table ریختم بیش از اندازه نشون داد . اگه میشه کمک کنید. مرسی

RIG000
پنج شنبه 25 فروردین 1390, 05:31 صبح
کسی نبود کمک کنه ؟

quantomquery
جمعه 17 تیر 1390, 14:12 عصر
اشکال در استفاده از 2 جدول در کریستال ریپورت (http://barnamenevis.org/showthread.php?294615-%D8%A7%D8%B4%DA%A9%D8%A7%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-2-%D8%AC%D8%AF%D9%88%D9%84-%D8%AF%D8%B1-%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)