PDA

View Full Version : سوال: نمایش اطلاعات چند جدول به صورت مجزا درون Data Grid View



M.amin
پنج شنبه 03 اسفند 1391, 12:19 عصر
سلام .
یه دیتابیس داریم که با Sql Compact پیاده سازی شده ،
برای هر بخش یک جدول داریم . برای نمایش اطلاعات و جستجو ی هر بخش بدون مشکل میشه اطلاعات رو فراخوانی کرد .

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

من اومدم یه Table Adapter رو ساختم که شامل همه ی اون جدول هایی که باید نمایش داده میشد بود . اما وقتی اون رو به Grid View وصل میکنم . اطلاعات به صورت جداگونه نمایش داده نمیشه و همه اون اطلاعات رو به هم وصل میکنه .

M.amin
جمعه 04 اسفند 1391, 10:25 صبح
دوستان راهی به نظر شون نمیرسه که اطلاعت دو جدول رو بتونیم توی یه گرید ویو نشون بدیم . یه جوری باید این اطلاعات رو با هم یکی کنیم . یعنی جداول رو با هم وصل کنیم . ولی چه جوری ؟؟
با وصل کردن جدول ها . ستون های مشترک جداگونه میاد ...

من میخوام . مثلا : سه تا فیلد شماره و مبلغ و کد رو که توی دو تا جدول دارم . به توی ستون ها به صورت عنوان نشون داده بشه . و اطلاعات هر دو تا جدول به صورت ردیفی مثل بقیه گزارش های عادی نشون داده بشه .
دوستان راهی به نظر شون نمیرسه

Mahmoud.Afrad
جمعه 04 اسفند 1391, 10:33 صبح
در صورتی که جداول فیلد مشترک دارند به نظرم از join استفاده کنید جواب بگیرید.
اگر نه میتونید از union در کوئری استفاده کنید.

M.amin
جمعه 04 اسفند 1391, 10:54 صبح
فیلد مشترک دارند . مثلا نام شرکت .
برای ثبت هزینه های داخلی شرکت من یه جدول ، و برای هزینه های خارجی هم یه جدول دارم . حالا زمانی که میخوام هزینه های داخلی و خارجی رو با هم نشون بدم . با Join کردن این کار رو میکنه ... اما مساله اینجاست که نمیخوام مثلا توی یه سطر . هم هزینه های خارجی رو نشون بده هم داخلی رو ...
میخوام هزینه داخلی رو توی یه سطر و هزینه خارجی رو هم توی سطر جداگونه نشون بده . عنوان ها هم هزینه ها و تاریخ و کد های مربوطه باشه .

M.amin
جمعه 04 اسفند 1391, 13:22 عصر
جدول جداگونه برای نام شرکت ها وجود نداره .
سه تا جدول کلا هست که یکی هزینه های داخلی ، هزینه های خارجی و یکی هم هزینه های متفرقه
هر کدوم از این جدول ها فیلد نام شرکت و تاریخ و جمع هزینه ها رو دارند .
حالا زمانی که بخوایم توی یک بازه زمانی مشخص . مثلا از 10/12/1391 تا 20/12/1391 و با وارد کردن نام شرکت . بتونیم لیست تمام هزینه ها رو ببینیم.

با دستور Union میشه نتیجه ها رو به هم الحاق کرد . اما چه طوری جداول رو با هم الحاق کنم .

دفعه اول بیام مبلغ هزینه های داخلی رو از جدول خودش Select کنم . بعد اون رو با دستور union به نتیجه هزینه ای خارجی و متفرقه الحاق کنم ؟؟

ali.mansoori66
شنبه 05 اسفند 1391, 13:24 عصر
آقا منم یه همچین مشکلی دارم
جدول ها : خرید , فروش , هزینه , پرداختی
حالا تو هر کدوم از اینا ما یه مبلغ داریم , یه تاریخ و یه شرح ماجرا.
حالا میخوام مثل دوستمون به ازاء کد X اطلاعات جدول خرید بیاد و بعد فروش و بعد هزینه و بعدشم پرداختی و در نهایت با تاریخ sort بشه
اساتید اگه کمک کنن ممنون میشیم !

ali.mansoori66
شنبه 05 اسفند 1391, 19:19 عصر
ما الان چی کار میتونیم بکنیم در حالی که از ساختار جداول شما با خبر نیستیم.
بزرگوار شما هر جور راحتی کار کن , شما یه مثال بزن که توش یه datatable یا gridview پر بشه اینطوری :(فیلد ها : tarikh , sharh , ghimat)(در ضمن این فیلد ها در همه جداول وجود داره )
جدول اول که داریم (به عنوان مثال فروش) تمام رکوردهایی که id برابر با 2 هستش , تاریخ و شرح و قیمت رو به جدول یا گرید اضافه کن و حالا در ادامه
جدول دوم (هزینه) تمام رکوردهایی که id برابر 2 هستش , تاریخ و شرح و قیمت به جدول یا گرید اضافه بشه و......
نکته اینجاس که ما فقط میخوایم این اطلاعات رو پشت سر هم قرار بدیم و فاکتور چاپ کنیم به جای اینکه این همه فاکتور ذخیره کنیم
این گوی و این میدان فک کنم واضح گفتم دیگه :چشمک:

Mahmoud.Afrad
شنبه 05 اسفند 1391, 23:03 عصر
بزرگوار شما هر جور راحتی کار کن , شما یه مثال بزن که توش یه datatable یا gridview پر بشه اینطوری :(فیلد ها : tarikh , sharh , ghimat)(در ضمن این فیلد ها در همه جداول وجود داره )
جدول اول که داریم (به عنوان مثال فروش) تمام رکوردهایی که id برابر با 2 هستش , تاریخ و شرح و قیمت رو به جدول یا گرید اضافه کن و حالا در ادامه
جدول دوم (هزینه) تمام رکوردهایی که id برابر 2 هستش , تاریخ و شرح و قیمت به جدول یا گرید اضافه بشه و......
نکته اینجاس که ما فقط میخوایم این اطلاعات رو پشت سر هم قرار بدیم و فاکتور چاپ کنیم به جای اینکه این همه فاکتور ذخیره کنیم
این گوی و این میدان فک کنم واضح گفتم دیگه :چشمک:
گوی و میدان دست شماست ما فقط میتونیم در اصلاح کد کمک کنیم.
به جای join یک سلکت ساده از جداول میکنید و نتیجه ها رو union all میکنید.
جواب بهتر می خواهید باید کدی که خودتون نوشتید را بزارید.

M.amin
یک شنبه 06 اسفند 1391, 14:45 عصر
بالاخره با راهنمایی های شما تونستم با دستور Union All جدول ها رو به هم دیگه الحاق کنم . و با یه دستور شرطی هم نتیجه جستجو ها رو فیلتر کنم .
اما یه مشکلی هست . توی فیلتر کردن بر اساس تاریخ .

نتایج رو میخوام بر اساس یک بازه تاریخی هم نشون داده بشه . اما توی دیتابیس فقط تاریخ ثبت سند هست . تاریخ دومی رو باید خود کاربر تعیین کنه . مقدار تاریخ دومی رو چه طوری میشه توی کوئری فراخوانی کرد .

این کدی هست که واسه الحاق دو جدول و فیلتر شدن نتایج هست

SELECT tarikkh, peyvast, Name, sherkat, Mablagh
FROM Transit_in
WHERE (sherkat LIKE N'%' + @sherkat + N'%') AND (peyvast = @peyvast)
UNION ALL
SELECT Tarikh, peyvast, Name, sherkat, Mablagh
FROM Transit_out
WHERE (sherkat LIKE N'%' + @sherkat + N'%') AND (peyvast = @peyvast)

Tiam121
یک شنبه 06 اسفند 1391, 15:05 عصر
خب تاریخ دوم رو هم خیلی راحت به عنوان یک پارامتر توی دستورsql بگیر و ازش استفاده کن

Mahmoud.Afrad
یک شنبه 06 اسفند 1391, 16:07 عصر
اگر تاریخ رو به صورت رشته با طول 10 ذخیره میکنید میتونید در شرط ها تاریخ رو به صورت مقایسه رشته ها در یک بازه بدست بیارید:
... WHERE ... AND tarikh >= @t1 AND tarikh <= @t2

M.amin
یک شنبه 06 اسفند 1391, 16:26 عصر
من از دو Date And Time Picker توی فرم برای انتخاب بازه تاریخ استفاده کردم.
اما مشکل زیادتر شد .
نوع دیتای تاریخ رو توی دیتابیس از نوع Nvarchar انتخاب کردم . و موقع ذخیره کردن هم فقط مقدار Date And Time Picker رو دورن جدول ذخیره میکردم .
اما حالا باید روی تاریخ عملیات مقایسه ای انجام بشه . میتونم از عملگر >= هم استفاده کنم . یا باید نوع دیتا رو به DateTime توی دیتابیس تغییر بدم . اگه نوع دیتا رو تغییر بدم . با کدوم خاصیت Date And Time Picker میتونم اطلاعات تاریخ رو درون دیتابیس ذخیره کنم .

این کد ثبت اطلاعات فرم درون جدول هست .

string Str_TRin = "insert into transit_in(Name,tarikkh,peyvast,sherkat,shomare,co ntinTedad,continSize,continShomare,hazine,Fhazine, tideWater,FtideWater,ezharname,Fezharname,govahi,F govahi,demond,Fdemond,masirKM,FmasirKM,tonKM,FtonK M,Karmozd,Mablagh,keshtirani,Fkeshtirani,qarantine ,Fqarantine,estandard,Festandard,Varizi,vaziat)" +
"VALUES ('" + name_txt.Text + "' , '" + DATE.Value + "' , '" + Peyvast_txt.Text + "' ,'" + sherkat_txt.Text + "' ,'" + Num_TXT.Text + "','" + tedad_con.Text + "','" + size_con.SelectedItem + "' , '" + num_con.Text + "' ,'" + Hazineh.Text + "' , '" + f_hazine.Text + "' ,'" + tideWater.Text + "' , '" + f_tideWater.Text + "','" + copyEzharNAme.Text + "' , '" + f_copyEzharName.Text + "' , '" + govahiTazmin.Text + "' ,'" + f_gowahiTazmin.Text + "' ,'" + demond.Text + "' ,'" + f_demond.Text + "' , '" + MasirKM.Text + "' ,'" + f_masirKM.Text + "' ,'" + toneKM.Text + "','" + f_toneKM.Text + "' ,'" + Karmozd.Text + "','" + sum_txt.Text + "','" +Keshtirani.Text+"' ,'" +Fkeshtirani.Text+"' ,'"+qrantine.Text+"' ,'"+fqrantine.Text+"' ,'"+Estandard.Text+"','"+Festandard.Text+"','"+Varizi_TXT.Text+"','"+Vaziat.SelectedItem+"' )";

Mahmoud.Afrad
یک شنبه 06 اسفند 1391, 16:59 عصر
بهتره از یک datetime picker تاریخ شمسی استفاده و تاریخ رو شمسی در دیتابیس ذخیره کنید.
farsiLibrary را از http://www.hightech.ir/Downloads دانلود و استفاده کنید.

M.amin
یک شنبه 06 اسفند 1391, 17:03 عصر
مرسی Mahmoud .Afrad عزیز . با کمک شما و راهنمایی های استادانه ات . این مشکل برطرف شد .

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

میتونیم بیایم تمام سطر های دیتا گرید فیلد مبلغ اش رو بخونیم و با هم جمع کنیم و نتیجه اش رو مثلا توی یه متغییر ذخیره کنیم . که بعدا برای فرستادن اش به Report ازش استفاده کنیم ؟؟

M.amin
یک شنبه 06 اسفند 1391, 17:08 عصر
برای تاریخ شمسی . من از Persian Date Time picker استفاده میکنم . که ساخته ی بچه های همین جا بود . حالات نمایش مختلفی رو هم داره .
مرسی از این کامپوننتی که معرفی کردی ، ازش استفاده میکنم ببینم چه طوریه .

M.amin
یک شنبه 06 اسفند 1391, 17:50 عصر
دقیقا . این مبلغ کل باید جمع کل ستون مبلغ ها باشه . و بعد از هر بار فیلتر کردن این مبلغ هم باید تغییر کنه .

من از این کد میخوام استفاده کنم برای بدست آوردن تعداد سطر ها و بعد ستون مورد نظر رو باهاش جمع کنم

Int32 temp;
Int32 SUM;
temp = DataGrid.Rows.Count-1;
for (int i = 0; i < temp; i++)
{

textBox1.Text=Convert.ToString( SUM + Convert.ToInt32(DataGrid[2, i].Value.ToString()));
}

اما با این ارور مواجه میشم .
Use of unassigned local variable 'SUM'

Mahmoud.Afrad
یک شنبه 06 اسفند 1391, 18:06 عصر
به متغیر محلی باید مقدار اولیه داده بشه.
یکبار مجموع رو محاسبه کنید و بعد نمایش بدید

Int32 temp = 0;
Int32 SUM = 0;
temp = DataGrid.Rows.Count - 1;
for (int i = 0; i < temp; i++)
{
SUM += Convert.ToInt32(DataGrid[2, i].Value);
}
textBox1.Text = SUM.ToString();