ورود

View Full Version : مشکل نشان ندادن داده های دیتاست در گزارش



hrshojaei
شنبه 08 اردیبهشت 1386, 10:34 صبح
سلام ، من توی یه برنامه آزمایشی 2 تا فرم دارم . یه dataset به برنامم Add کردم و توش یه DataTable گذاشتم . توی فرم1 یدونه Row با DataSet.DataTable.Rows.Add به جدولم اضافه کردم و با DataSet.DataTable[0][1 بهش مقدار دادم . توی Debug هم می بینم که جدولم مقدار داره . توی فرم2 یه کریستال ریپورت گذاشتم و توی طراحی کریستال ریپورت ستونهای جدولمو توی ریپورتم گذاشتم . حالا وقتی برنامرو اجرا می کنم فقط عنوان ستونها میاد و مقدارهای جدول نمیاد . راه حل چیه ؟ مرسی

reza_rad
شنبه 08 اردیبهشت 1386, 10:54 صبح
اگه کلید رفرش رو روی فرم ریپوتتون بزنید باز هم دیتاها رو نشون نمیده؟

* عنوان تاپیک رو همیشه مناسب انتخاب کنید. اینبار من اصلاحش کردم ولی امیدوارم از دفعه بعد خودتون رعایت کنید. باسپاس

hrshojaei
شنبه 08 اردیبهشت 1386, 11:07 صبح
با کلید Refresh هم نشون نمیده .
مرسی هم بابت عنوان ، چشم - رعایت می کنم .

reza_rad
شنبه 08 اردیبهشت 1386, 11:13 صبح
اگه دیتاست رو به یه گرید بایند کنید توی فرمتون، اونوقت دیتاها رو توی گرید نشون میده؟

hrshojaei
شنبه 08 اردیبهشت 1386, 11:36 صبح
یه فرم3 به برنامه اضافه کردم و یه گرید توش گذاشتم . از dataset به فرم اضافه کردم و گرید رو به اون و DataTable - بایند کردم ولی نشون نمیده . توی Debug هم جدول خالیه . من dataset رو هم public کردم . ولی جواب نداد

reza_rad
شنبه 08 اردیبهشت 1386, 11:57 صبح
پس مشکل از کریستال نیست. از دیتاست هست.
دیتاست رو Fill کردی؟ با کد؟

hrshojaei
شنبه 08 اردیبهشت 1386, 12:02 عصر
چه جوری Fill کنم . منکه از بانک نمی خونم . دستی Data بهش Add می کنم
برناممو Attach کردم . میشه ببینید و بگید ایراد کجاست ؟ مرسی

reza_rad
شنبه 08 اردیبهشت 1386, 13:34 عصر
من جایی ندیدم دیتا بریزی داخل دیتاست.

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


System.Data.DataSet dsTest=new DataSet();
System.Data.DataTable dtTest=new DataTable();
dtTest.TableName="test";
dtTest.Columns.Add("firstname");
dtTest.Columns.Add("lastname");

object[] drTest={"ali","alavi"};
dtTest.Rows.Add(drTest);

dsTest.Tables.Add(dtTest);




و بعدش هم توی کد بایندش کنی به گرید. اینجوری:


dtg.DataSource=dsTest.Tables["test"];


اینجوری دیتاست ات درست پر میشه.

اما در مورد کار با کریستال اینجوری مشکل خواهی داشت. چون کریستال دیتاست هایی که داخل کد پر میشن رو Support نمیکنه. مگه اینکه ویزاردی پر بشن.

hrshojaei
شنبه 08 اردیبهشت 1386, 15:19 عصر
مرسی از راهنمایی شما . من ورود اطلاعاتمو تو FormLoad گذاشتم .
حالا پس من چه جوری می تونم مشکلمو حل کنم . من یه برنامه دارم برای صدور فاکتور . اطلاعات فاکتور از کاربر گرفته می شه بعد از تموم شدن کار توی بانک ، تو 2 تا Table یکی برای مشخصات فاکتور و یکی برای اقلام فاکتور ذخیره می شه . حالا می خوام این فاکتور رو با کریستال نمایش بدم و بتونم پرینت کنم . چه جوری این اطلاعاتو به کریستال بدم . اگه بخوام اول تو بانک ذخیره کنم . خوب اگه کاربر اطلاعاتو عوض کنه . باید دوباره بانکو اصلاح کنم . اگه بخوام توی یک Table موقت ذخیره کنم که کریستال از اون بخونه . فکر کنم کار جالبی نباشه که من اطلاعاتو بفرستم رو سرور بعد دوباره بیارم تو Client . قاعدتاً سرعت پایین میاد .
حالا شما چه راهی می شناسی ؟ از ParameterFields استفاده کنم . تعداد پارامترها خیلی زیاده
ممنون می شم منو راهنمایی کنید .

reza_rad
یک شنبه 09 اردیبهشت 1386, 07:10 صبح
خب در کل وقتی کاربر شما داده ها رو تغییر میده مسلما می خواد اینا رو روی دیتابیس هم عوض کنه.نه؟
پس بالاخره باید این تغییرات روی دیتابیستون اعمال بشه.
ضمن اینکه شما می تونی برای اون قسمتی که قراره توی ریپورت کریستال ات نشون بدی یه دیتاست بصورت ویزاردی بسازی و مشکل رو حل کنی.

در مورد حجم بالای داده های و کم شدن سرعت هم بهتره کارهایی روی دیتابیس ات انجام بدی مثل ایندکسینگ و ... و یا داده ها رو یه جوری فیلتر کنی و بیاری چون مسلما گزارش کریستال قرار نیست میلیونها رکورد رو نشون بده.

sm
یک شنبه 09 اردیبهشت 1386, 07:44 صبح
فکر کنم کار جالبی نباشه که من اطلاعاتو بفرستم رو سرور بعد دوباره بیارم تو Client . قاعدتاً سرعت پایین میاد.

اتفاقا نه تنها کار خیلی جالبی هست بلکه واجبه!
چون وقتی شما اطلاعات رو قبل از اینکه توی بانک ذخیره کنید چاپ بگیرید، چه ضمانتی وجود داره که بعد از چاپ موفق بشید توی بانک ذخیره کنید!؟
ساده ترین مشکلی که احتمال داره اتفاق بیافته اینه که برق بره یا سیستمتون هنگ کنه!

بنابراین روش اصولی اینه که همواره شما اطلاعات و اصلاحات احتمالی رو توی بانک اعمال کنید و هرجا که نیاز به گزارشگیری داشتید از اطلاعات ذخیره شده استفاده کنید.

موفق باشید

hrshojaei
یک شنبه 09 اردیبهشت 1386, 13:36 عصر
سلام ، مرسی از راهنماییهاتون
بابا من کلافه شدم . الان توی یه فرم یه گرید گذاشتم با یه کریستال ریپورت . یه TableAdapter هم از بانک SQL به جفتشون دادم . حالا گریدم اطلاعاتو نشون میده اما کریستال نه . چرا ؟
ممنون از کمکتون

reza_rad
یک شنبه 09 اردیبهشت 1386, 13:47 عصر
برای اینکه کریستال دیتاها رو نشون بده باید با ویزارد و از طریق verify database بهش دیتاها رو بایند کنید. یا اینکه فیلد ها رو بدید و بعد با کدنویسی بهش بایند کنید.

در کل همینجوری نمیشه. از داخل خود فایل ریپورت باید تنظیمات انجام بشه نه عین گرید از داخل برنامه.

sm
یک شنبه 09 اردیبهشت 1386, 13:49 عصر
شما اگه اگر یه متغیر از جنس گزارشتون تعریف کنید و با آن کار کنید مشکلتون حل میشه.
اگر بگردین در این مورد قبلا بحث شده.

موفق باشید

hrshojaei
دوشنبه 10 اردیبهشت 1386, 13:25 عصر
سلام ، مرسی از راهنماییهاتون ولی بازم مشکل حل نشد.
توی تاپیکهای قبلی هم گشتم . چیزی پیدا نکردم . هر چی هست راهنمایی کلی هستش و جزییات نیست . خیلی از راهنماییها هم جواب نمی ده . توی اینترنت هم گشتم . چیزی پیدا نکردم . کتاب Porfessional Crystal Report رو هم دیدم . اونجا هم نوشته که برای کار با DataSet باید کد نویسی کرد ولی راهی که گفته برای VS2003 هست نه VS2005 . اونجا گفته که باید از Toolbar متغیری از جنس OleDbDataAdapter گرفت و ... . ولی در VS2005 من همچیزی ندیدم . میشه لطفاً منو با جزییات راهنمایی کنید که باید چیکار کنم . و یا اگه کتابی برای VS2005 دارید برام بفرستید .
همه تاپیکهای قبلی کامل نیستن . لطفا این بحث رو کامل توضیح بدین تا مشکل بقیه هم حل شه . ممنون

reza_rad
دوشنبه 10 اردیبهشت 1386, 14:10 عصر
منبع فارسی:
http://barnamenevis.org/forum/showthread.php?t=64328

منبع انگلیسی:
http://barnamenevis.org/forum/showpost.php?p=293554&postcount=16

hrshojaei
دوشنبه 10 اردیبهشت 1386, 15:05 عصر
سلام ، مشکل حل شد . کریستال هم اطلاعاتو از DataTable و هم از TableAdapter نشون میده . اولیو از داخل برنامه بهش Data دادم و دومی از داخل بانک با متود FillBy که خودم ساختمش Data دادم . اگه کسی کمک خواست شاید بتونم یه خورده کمکش کنم . از دوستان هم که منو راهنمایی کردن ممنون .