PDA

View Full Version : سوال: کسی از گزارش سر در میاره؟(مشکلی از دیتابیس)



zayens
شنبه 29 خرداد 1389, 17:05 عصر
امان از دست این گزارش.
بهتر بگم، امان از دست این دیتابیس.
گزارشم با کریستال ریپورته. در قسمت Database Fields که جدولی را انتخاب و اضافه میکنم، بعد از اجرای برنامه
فقط قسمتهایی که طراحی کردم مثل خطوط و تکست ها نمایش داده میشه و داده ها نمایش داده نمیشه.
مشکل چیه؟
درضمن دیتابیسم را در Solution اضافه و Add کردم

goolestan
شنبه 29 خرداد 1389, 17:15 عصر
کریستال ریپورت datasource ,, databese connection,, refresh,,وکلی پروپرتی داره باهاشو بیشتر کارکن و جای به مشکل برخورد کردی از MSDN خود V.S استفاده کن خیلی بهتر جواب میگیرید

حجتی نیا
شنبه 29 خرداد 1389, 17:53 عصر
امان از دست این گزارش.
بهتر بگم، امان از دست این دیتابیس.
گزارشم با کریستال ریپورته. در قسمت Database Fields که جدولی را انتخاب و اضافه میکنم، بعد از اجرای برنامه
فقط قسمتهایی که طراحی کردم مثل خطوط و تکست ها نمایش داده میشه و داده ها نمایش داده نمیشه.
مشکل چیه؟
درضمن دیتابیسم را در Solution اضافه و Add کردم


avarez_tableTableAdapter.readdata(avarezdataset.av arez_table,Convert.ToInt32(dataGridView1.CurrentRo w.Cells[0].Value));
امیدوارم همونطور که قبلا در پست قبلیتون گفتم connectionstring رو در dataadapterها با connectionstring اصلیتون مطابقت داده باشین...
اگه database fieldهارو با دادن dataset به کریستال اضافه کردین فقط کافیه برای نشون دادن اطلاعات،اون datasetرو با اطلاعاتی که خودتون میخواین پرش کنید.مثلا من تو کد بالا یه دستور select بنام(readdata) در dataadapter مربوط به همون دیتاست ایجاد کردم که فقط تو ورودی یه عدد میخواد.. با گذاشتن چنین کدی توی متد چاپ اطلاعات درخواستیتون تو فیلدها نشون داده میشه

zayens
یک شنبه 30 خرداد 1389, 11:17 صبح
سلام و ممنون از جواب.
عکس را که نگاه کردم متوجه یه چیزی شدم و اون هم اینکه همه ی TableAdapterهای من فقط دارای یک سطر هستند.
در واقع همشون فقط سطر ()Fill,GetData را دارن.
سوالم اینه که چه طور باید پارامترهای دیگه را بهشون اضافه کرد.
در ضمن میخواستم بگم من فرم کریستال را مثلا با کد زیر فراخوانی می کنم که البته کد زیر هم در یه فرمی دیگه فراخوانی میشه(فرم درخواست چاپ)
آیا در این کدها هم تغییراتی لازمه؟


کد فرم درخواست چاپ و صدا زدن فرم کریستال
try
{
frmGozareshFac frmG = new frmGozareshFac();
frmG.ShowDialog();
}
catch { MessageBox.Show("امکان پرینت وجود ندارد", "پرینتر را چک کنید"); }

فرم کریستال


public frmGozareshFac()
{
InitializeComponent();
CrystalsodurFac c = new CrystalsodurFac();
c.SetParameterValue("@FACTORID", frmFac.crystalFACTORID);
c.SetParameterValue("@PRINTDATE", frmFac.dateNow);
crystalReportViewer1.ReportSource = c;
}


جناب حجتی نیا
من دیگه جدا خسته شدم.
یه نمونه کد کوچیک سراغ دارید تا منو از این سر درگمی در بیاره
میخوام بدونم چه جوری باید قسمتی از یه جدول را در گزارشمون بیاریم
مثلا:
با این استورپرسیجر که Add شده میخوام شماره های خاصی را انتخاب و نمایش بده


ALTER proc SelectOneFactor
@FACTORID bigint
as
select *from ALLFACTORS where FACTORID=@FACTORID

که مقدار FACTORID@ از همون کد قبل یعنی ;(c.SetParameterValue("@FACTORID", frmFac.crystalFACTORID گرفته میشه
بازم از زحماتتون ممنون

حجتی نیا
یک شنبه 30 خرداد 1389, 11:53 صبح
سوالم اینه که چه طور باید پارامترهای دیگه را بهشون اضافه کرد.
روی tableadapter کلیک راست و add query>use sql statment ،نوع query رو انتخاب میکنین که اگه میخواین چندسطر چاپ بشه گزینه اول رو انتخاب کنین،بعدش دستور رو بنویسین و تمام..

آیا در این کدها هم تغییراتی لازمه؟
در کد دوم باید بگم که من از report document استفاده میکنم:

avarez_tableTableAdapter.readdata(avarezdataset.av arez_table,Convert.ToInt32(dataGridView1.CurrentRo w.Cells[0].Value));
ReportDocument rd = new ReportDocument();
rd.Load(Application.StartupPath +"\\avarez_report.rpt");
rd.SetDataSource((DataTable)avarezdataset.avarez_t able);
rd.SetParameterValue(...........);
crystalReportViewer1.ReportSource = rd;
یه پیشنهاد واسه شما دارم و اینه که از sql statment بجای استورپرسیجر استفاده کنین که کار راحتتره،در ضمن من تجربه ای راجع به استورپرسیجر ندارم...واسه پرکردن کریستال میتونین با پرکردن دیتاست بوسیله کوئری دلخواه خودتون اینکترو انجام بدین..
کد بالا رو وقتی میخوام کریستال رو پرکنم نوشتم یعنی اول جدول دیتاست رو با کوئری خودم پرمیکنم و بعدش سورسه کریستال رو همون جدول دیتاست قرار میدم،فقط همین...

zayens
سه شنبه 01 تیر 1389, 13:24 عصر
یه پیشنهاد واسه شما دارم و اینه که از sql statment بجای استورپرسیجر استفاده کنین
sql statment ؟
من از این چیزی نمیدونم
چند تا نمونه کد میذارین تا یاد بگیرم؟

zayens
سه شنبه 01 تیر 1389, 13:34 عصر
آیا منظورتون همون CommandText است؟مثل کد زیر؟


cmd = newSqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "USE master RESTORE DATABASE [DBRESTORANS] FROM DISK ='" + mypath + "' WITH RECOVERY, REPLACE";
.
.
.

حجتی نیا
سه شنبه 01 تیر 1389, 15:45 عصر
آیا منظورتون همون CommandText است؟مثل کد زیر؟


cmd = newSqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "USE master RESTORE DATABASE [DBRESTORANS] FROM DISK ='" + mypath + "' WITH RECOVERY, REPLACE";
.
.
.

بله دقیقا،توی tableadapter با این نام اومده..

zayens
سه شنبه 01 تیر 1389, 23:36 عصر
توی tableadapter چه طور باید ازشون استفاده کنم(چطور و کجا اونها را قرار بدم)
اگه میشه یه مثال با یه کد ساده بزنید
در ضمن ...
پس تکلیف دیتابیسم چی میشه؟
منظورم اینه که هنگام ساخت دیتابیسم با sql چه طور باید این کار را میکردم
یا حداقل بگید الآن باید در دیتابیسم چیکار کنم؟

حجتی نیا
چهارشنبه 02 تیر 1389, 00:21 صبح
توی tableadapter چه طور باید ازشون استفاده کنم(چطور و کجا اونها را قرار بدم)
تو پست 5 نحوه ایجادشو گفتم.. توی پست 3 هم یه عکس گذاشتم خوب نگاش کنید،زمانی که توی tableadapter یه کوئری جدید اجاد کردین به اون لیست اضافه میشه و در خلال برنامه میتونین از اون استفاده کنین،البته با تعریف همون commandtext ها در طی برنامه هم میشه اینکارا رو انجام داد ولی اگه استفاده از اون کوئری زیاده با تعریف توی tableadapter یبار انجام میشه و توی برنامه لازم نیست هردفعه اونو دوباره تعریف کنید...

پس تکلیف دیتابیسم چی میشه؟
منظورم اینه که هنگام ساخت دیتابیسم با sql چه طور باید این کار را میکردم
یا حداقل بگید الآن باید در دیتابیسم چیکار کنم؟
این موضوع ربطی به sqlنداره و توی vs هست..بهتره شما اولین بار که دیتابیس رو به برنامه اضافه میکنین(data>add new data source) در مرحله آخرش که داره یه دیتاست ایجاد میکنه،همه جداول رو تیک بزنین تا لازم نباشه هربار تو برنامه یه دیتاست جدید تعریف کنین..
عکس 1 : فیلد هایی که از طریق دیتاست به کریستال اضافه کردم
عکس 2 : پرکردن همون دیتاست در متد پرینت
عکس 3 : کوئری مورد نظر که با اون دیتاست را پر و اطلاعات اون در کریستال چاپ میشه.در کوئری دیده میشه که من اطلاعات رو براساس یه کدرهگیری(یه فیلد) جستجو میکنم و در پر کردن اون هم(عکس2) در متد پرینت یه فیلد رو بانام (new rahgiri) به اون به عنوان پارامتر میفرستم...

ازنظر نگارش یکم متنم نقص داره،هرجا به توضیح اضافه داره بگین....