PDA

View Full Version : كمك فوري در مورد گزارش گيري



yas2010
جمعه 05 شهریور 1389, 11:57 صبح
من اين كد رو واسه گرفتم گزارش به شرط يه فيلد خاص ميگيرم
ولي وقتي اجرا ميكنم ميگه نمي تونه مقدار
textbox وارد شده توي
رو به شكل اينت عددي بگيرم كه تو جدول هم نوع آن اينت هست
ولي وقتي اجرا ميكنم و دكمه رو ميزنم خطا ميگيره
private void frm_report_Load(object sender, EventArgs e)
{
Form2 f11 = new Form2();//فرمي هست كه كد كالا رو وارد اين فرم ميكنم بعد دكمه گزارش رو ميزنم و فرم ريپورت باز ميشه

report_con.Open();
da1 = new SqlDataAdapter("select * from tbl_kala where code_kala=@code_kala",report_con);
da1.SelectCommand.Parameters.Add(new SqlParameter("@code_kala", SqlDbType.Int, 4, "code_kala"));
da1.SelectCommand.Parameters[0].Value = System.Convert.ToInt32(f11.txt_search.Text);
// da1.SelectCommand.Parameters.AddWithValue("@code_kala", f11.txt_search.Text);

da1.Fill(ds,"tbl_kala");
cr1 report = new cr1();
report.Load("cra.rpt");
report.SetDataSource(ds);
crv1.ReportSource = report;
report_con.Close();
}

mmd2009
جمعه 05 شهریور 1389, 12:01 عصر
با اجازتون اینطوری گذاشتم تا کسی خواست جواب بده راحتر بتونه بخونه
=============
من اين كد رو واسه گرفتم گزارش به شرط يه فيلد خاص ميگيرم
ولي وقتي اجرا ميكنم ميگه نمي تونه مقدار
textbox وارد شده توي
رو به شكل اينت عددي بگيرم كه تو جدول هم نوع آن اينت هست
ولي وقتي اجرا ميكنم و دكمه رو ميزنم خطا ميگيره



private void frm_report_Load(object sender, EventArgs e)
{
Form2 f11 = new Form2();//فرمي هست كه كد كالا رو وارد اين فرم ميكنم بعد دكمه گزارش رو ميزنم و فرم ريپورت باز ميشه
report_con.Open();
da1 = new SqlDataAdapter("select * from tbl_kala where code_kala=@code_kala",report_con);
da1.SelectCommand.Parameters.Add(new SqlParameter("@code_kala", SqlDbType.Int, 4, "code_kala"));
da1.SelectCommand.Parameters[0].Value = System.Convert.ToInt32(f11.txt_search.Text);
// da1.SelectCommand.Parameters.AddWithValue("@code_k ala", f11.txt_search.Text);

da1.Fill(ds,"tbl_kala");
cr1 report = new cr1();
report.Load("cra.rpt");
report.SetDataSource(ds);
crv1.ReportSource = report;
report_con.Close();
}

--------------------
میشه ارورش رو هم بذارید

با تشکر

yas2010
جمعه 05 شهریور 1389, 16:32 عصر
Input string was not in a correct format. اينم ارورش من مثلا عدد 2 رو وارد ميكنم اما وقتي تو جزئيات ميرم تكست مقدار خالي گرفته اما وقتي مستقيما تو دستور اس كيو ال مقدار 2 رو به كد كالا ميدم گزارش رو مياره
--------------------
و يك موضوع وقتي يك نوع جديد از نوع فرم تعريف ميكنم چرا به اشيائ درون اون نميشه دستيابي كرد مثلا تكست باكس 1 يا هر چيزي اين كار تو وي بي دات نت خيلي راحت راهنمايي كنيد

yas2010
جمعه 05 شهریور 1389, 16:38 عصر
و يك موضوع وقتي يك نوع جديد از نوع فرم تعريف ميكنم چرا به اشيائ درون اون نميشه دستيابي كرد مثلا تكست باكس 1 يا هر چيزي اين كار تو وي بي دات نت خيلي راحت راهنمايي كنيد

yas2010
جمعه 05 شهریور 1389, 16:51 عصر
لطفا ترو خدا زود راهنمايي كنين معادل صحيح كد رو

vandermond
جمعه 05 شهریور 1389, 17:57 عصر
سلام دوست عزيز.
من با اين

da1.SelectCommand.Parameters.Add(new SqlParameter("@code_kala", SqlDbType.Int, 4, "code_kala"));
آشنا نبودم. كلمه SqlParameter چي هست؟ براي من كه به عنوان كلمه كليدي عمل نميكنه:متفکر:.
توصيه ميكنم به جاي اين دوخط:

da1.SelectCommand.Parameters.Add(new SqlParameter("@code_kala", SqlDbType.Int, 4, "code_kala"));
da1.SelectCommand.Parameters[0].Value = System.Convert.ToInt32(f11.txt_search.Text);
از همون خطي كه غيرفعال كردي، با اين تغييرات استفاده كن:

da1.SelectCommand.Parameters.AddWithValue("@code_kala", Int32.Parse(f11.txt_search.Text));
براي دستيابي هم اگه منظورتون اين باشه كه از يك فرم به يك فرم ديگه. مثلا از فرم دوم به فرم اول دسترسي داشته باشين كه اين از مباحث شي گرايي هست و جزء اصول هست اگه بخاي از فرم دوم به فرم اول دسترسي داشته باشي بايد خاصيت ايجاد كني و ... (تو همين سايت بحث زياد شده. بگرد اگه پيدا نكردي بگو بگم). البته براي دسترسي از فرم دوم به فرم اول يه چيزاي ديگه هم هست كه فعلا شلوغش نميكنم. همينا رو امتحان كن فعلا.
مشكلي بود بگو...

حجتی نیا
جمعه 05 شهریور 1389, 18:07 عصر
يك موضوع وقتي يك نوع جديد از نوع فرم تعريف ميكنم چرا به اشيائ درون اون نميشه دستيابي كرد
فرم 2 بازه ؟؟ واسه دسترسی به تکس باکس اون، میتونین اونو public تعریف کنین(form2_desighner)

vandermond
جمعه 05 شهریور 1389, 18:39 عصر
فرم 2 بازه ؟؟ واسه دسترسی به تکس باکس اون، میتونین اونو public تعریف کنین(form2_desighner)
نه نه نه .... !!!!
اين كار اصلا درست نيست. البته كار رو راه ميندازه ولي با اصول شي گرايي كاملا مشكل داره. بهترين راهي كه من تا حالا ديدم و استفاده كردم همون ايجاد يك خاصيت (پراپرتي) هستش كه public باشه و از طريق اون به اون چيزي كه ميخاي دسترسي داشته باشي.
البته دوست عزيز جناب حجتی نیا (http://barnamenevis.org/forum/member.php?u=88681) ، اميدوارم از دستم ناراحت نشده باشي براي اون «نه نه نه» :لبخند:.

javad_r_85
جمعه 05 شهریور 1389, 18:53 عصر
سلام اگر درست منظورتان را فهمیده باشم در واقع شما می خواهید تا گزارشتان را بر اساس مقداری که از تکست باکس دریافت میکنه فیلتر کنید به روش زیر عمل کنید.

report source
ان باید خالی باشد
سپس از طریق
add new item
یک کرستال ریپورت به برنامه اضافه میکنیم به نام
CrystalReport1
در فرم اصلی یک تکست باکس برای وارد کردن مقدار و یک باتن قرار داده و این کد را به آن اضافه می کنیم
.




private void button1_Click(object sender, EventArgs e)
{


CrystalReport1 rpt = new CrystalReport1();
rpt .RecordSelectionFormula = "{costomerid.id}=" + Int16.Parse(textBox1.Text);


Form2 f2=new Form2 ();
f2.crystalReportViewer1.ReportSource = rpt ;

f2.Show ();
}





در اینجا ما در تکست باکس عدد وارد میکنیم و فیلتر ما بر اساس آن است و اگر ما مثلا برای نام خواستیم فیلتر کنیم نیاز نیست تا
Int16.Parse
را وارد نماییم.


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

my parametr
از طریق
parameter fild
ایجد مینکنیم به د این کد را به فرم اضافه میکنیم می تونیم تاریخ شمسی را به گزارش بفرستیم



CrystalReport1 c = new CrystalReport1();
c.SetParameterValue("my parametr", مقدار);

حجتی نیا
جمعه 05 شهریور 1389, 19:34 عصر
البته دوست عزيز جناب حجتی نیا (http://barnamenevis.org/forum/member.php?u=88681) ، اميدوارم از دستم ناراحت نشده باشي براي اون «نه نه نه» :لبخند:.

خواهش میکنم، این حرفا چیه ..:قلب:
جناب javad_r_85 (http://www.barnamenevis.org/forum/member.php?u=140635) دوستمون میخواد اطلاعات رو از یه تکس باکس فرم دیگه بگیره ..

yas2010
جمعه 05 شهریور 1389, 23:20 عصر
شرمنده من تازه كارم نمي دونم چيو جستجو كنم ميشه كد دسترسي از فرم دوم به اشيا روي فرم اول را بنويسيد؟

yas2010
جمعه 05 شهریور 1389, 23:29 عصر
خواهش ميكنم هرچه زود جواب بدين گير كردم رو اين موضوع

yas2010
جمعه 05 شهریور 1389, 23:56 عصر
اگه سي شارپ اينقدر گير ميده به همه چي بيخيال شيم واسه دستيابي به يك شي از طريق فرم ديگر هزار تا دنگ و فنگ ميخواد هزار رحمت به وي بي من آخرسن نفهميدم چرا نميزاره مثلا به تكست باكس فرم يك تو فرم دو دسترسي داشته باشيم با اين كه يك شي از آن فرم ميسازم

mmd2009
شنبه 06 شهریور 1389, 00:25 صبح
خب عزیزم شما به راحتی با استفاده از پراپریتی میتونید به این چیزی که مد نظرتونه دست یابی پیدا کنید

همین الان مشکلت رو یک بار دیگه دقیق بگو من رسما بهت تا اخرش کمک می کنم و اگر هم مشکی داشتی من انلاین هستیم کافیه بهم PM بدی

yas2010
شنبه 06 شهریور 1389, 01:02 صبح
خب عزیزم شما به راحتی با استفاده از پراپریتی میتونید به این چیزی که مد نظرتونه دست یابی پیدا کنید

همین الان مشکلت رو یک بار دیگه دقیق بگو من رسما بهت تا اخرش کمک می کنم و اگر هم مشکی داشتی من انلاین هستیم کافیه بهم PM بدی
من ميخام توي فرم 1 كد كالا رو وارد كنم بعد وقتي چاپ رو زدم در فرم دوم اطلاعات مربوط به كد كالا رو بياره مشكل اينه كا من نمي تونم به تكست باكس مثلا 1 در فرم دوم دسترسي داشته باشم و مقدار اونو توي شرط دستور اس كيو ال اعمال كنم

javad_r_85
شنبه 06 شهریور 1389, 01:21 صبح
من ميخام توي فرم 1 كد كالا رو وارد كنم بعد وقتي چاپ رو زدم در فرم دوم اطلاعات مربوط به كد كالا رو بياره مشكل اينه كا من نمي تونم به تكست باكس مثلا 1 در فرم دوم دسترسي داشته باشم و مقدار اونو توي شرط دستور اس كيو ال اعمال كنم

سلام .این که دیگه دعوا نداره شما قدم به قدم منو همراهی کن تا بگم چه کار کنی:لبخند:
ابتدا یک کلاس به فرمت اضافه می کنی و این دستورات را به آن اضافه کن




public class1
{
int i;
int I
{get
{
return i;
}
set
{
i=value;
}
}

}




حالا در فرم یک ابتدا یه نمونه از کلاس ایجا د میکنی



class1 c=new class1();
c.I=Int16.parse(txtid.text);



در اینجا کد کالا را در متغییر در کلاس ریختیم
حالا در فرم 2 میتونید از این متغییر استفاده کنید




class1 c=new class1();
int k=c.I;





به همین راحتی حالا متغییر فرم اول در k
ریخته شد و میتونید ازش استفاده کنید . به این می گن شی گرایی.

mmd2009
شنبه 06 شهریور 1389, 03:08 صبح
سلام دوست عزیز.

همونطوری که تو چت رم گفتی که مشکلت چیه من هم قول دادم واست یه برنامه تا قبل ساعت 3 بذارم و اینم برنامه. امیدوارم برات مفید باشه.

من دیتابیس تورو نداشتم و خودم یکی همینطوری درست کردم و تو برنامه تو فرم یم گفتم مقدار سن بزگتر از

بعدش تو تکستش مینویس 21 و بعدش تو گزارش کسانی که سنشون بزرگتر از 21 هست رو نشون میده

------------------

برنامه رو ضمیمه کردم و لینک دیتابیس رو از اینجا (http://mmdramiz.persiangig.com/DB.rar)دانلود کن

mmd2009
شنبه 06 شهریور 1389, 03:57 صبح
دوست عزیز اینم یک روش دیگه که باز نوشتم برات.

امیدوارم دیگه کارت راه بیفته. نیفتاد باز پیغام بده.

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