PDA

View Full Version : سوال: گرفتن اطلاعات از چند جدول و نمایش در datagridview



vB.N3T
چهارشنبه 05 اسفند 1394, 11:10 صبح
سلام مهندسین عزیز روزتون مبارک :قلب:

دوستان من میخام گزارش بالانس مالی رو پیاده سازی کنم و نیاز دارم از هر جدول یک یا چند فیلد رو سلکت کنم و در دیتاگرید نمایش بدم
بین جدوال هم ارتباطی نیست
ولی خب باید یه شرط برای انتخاب فیلد ها بزارم که اونم سال هستش
مثلا تاریخ به این صورت در جدول ذخیره شده 1394/12/1
مثال : از جدول price فیلد price
از جدول ghoboz فیلد pardakhti
از جدول help فیلد price

اول اومدم یه کمبو باکس قرار دادم و همه سال ها رو در اون لود کردم

private object[] year = { "1394", "1395", "1396", "1397", "1398", "1399", "1400", "1401", "1402", "1403", "1404", "1405", "1406", "1407" };

private void Frm_Balance_Mali_Year_Load(object sender, EventArgs e)
{
combo_year.Items.AddRange(year);

}

بعد این سلکت رو زدم ولی فیلد های خالی رو سلکت زد
var Qselect = from s in db.Tbl_dareyafti2s
where s.date == combo_year.Text.Substring(0, 4)
select new { s.price };
dataGridView1.DataSource = Qselect;
ممنون میشم راهنمایی کنید .یا راه حلی پیشنهاد بدید

kamiloted
چهارشنبه 05 اسفند 1394, 13:29 عصر
دوست عزیز برای انتخاب از هر جدول به عقیده من باید یک ویو از جداول بسازی. و با یک دستور سلکت اون محتویات ویو را نمایش بدی.

ژیار رحیمی
چهارشنبه 05 اسفند 1394, 13:43 عصر
دوست گرامی شما داری یه تاریخ رو با یک عدد مقایسه میکنی

var year=Convert.ToInt32( combo_year.Text.Substring(0, 4));
var Qselect = from s in db.Tbl_dareyafti2s
where s.date.Date.Year ==year
select new { s.price };
dataGridView1.DataSource = Qselect;


برای کویری از سه جدول که ارتباطی باهم ندارند سه کویری رو مثل کویری که برات نوشتم انجام بده سپس نتایج کویری ها رو Cancat کن نتیجه دلخواه شما بدست میاد

vB.N3T
چهارشنبه 05 اسفند 1394, 19:23 عصر
جناب رحیمی تاریخ در جدول به صورت یه رشته 1394/12/1 دخیره میشه
در این خط با خطا مواجه میشه

where s.date.Date.Year ==year
Date و Year

ژیار رحیمی
چهارشنبه 05 اسفند 1394, 19:38 عصر
جناب رحیمی تاریخ در جدول به صورت یه رشته 1394/12/1 دخیره میشه
در این خط با خطا مواجه میشه

where s.date.Date.Year ==year
Date و Year
روش اول براساس مقایسه سال

var year= combo_year.Text.Substring(0, 4);
var seledaryafti = from s in db.Tbl_dareyafti2s
where s.date.Substring(0, 4) ==year
select new { s.price };

روش دوم مقایسه بر اساس تاریخ ،سرعت اجرا بهتر و سرباری کمتری نسبت به کد بالا داره

var startDate=string.Format("{0}/01/01",year);
var endDate=string.Format("{0}/12/30",year);
var seledaryafti = from s in db.Tbl_dareyafti2s
where s.date >=startDate && s.date<=endDate
select new { s.price };

vB.N3T
چهارشنبه 05 اسفند 1394, 20:14 عصر
خیلی خیلی ممنون جناب مهندس رحیمی گل دقیقا درست
جناب رحیمی امکانش هست هر select نتیجش در سلول جدا دیتاگرید قرار بگیره ؟ من با seledaryafti.Concat(select_price);
2 تا سکت زدم..نتایج رو در یه ستون زیر هم میاره

از این کد استفاده کردم که در سلول اول بریزه اما نشد
dataGridView1.CurrentRow.Cells[0].Value = seledaryafti;

ژیار رحیمی
چهارشنبه 05 اسفند 1394, 20:21 عصر
خیلی خیلی ممنون جناب مهندس رحیمی گل دقیقا درست
جناب رحیمی امکانش هست هر select نتیجش در سلول جدا دیتاگرید قرار بگیره ؟ من با seledaryafti.Concat(select_price);
2 تا سکت زدم..نتایج رو در یه ستون زیر هم میاره

از این کد استفاده کردم که در سلول اول بریزه اما نشد
dataGridView1.CurrentRow.Cells[0].Value = seledaryafti;

دوست گرامی نتیجه کویری بصورت مجموعه یی از رکوردهای تک ستونی Price هست یک عدد برای شما برنمیگردونه .در صورتی که بخوای Sum ،Ave و ... در کویری باشه میتونی نتیجه رو دریک سلول قرار بدی

vB.N3T
چهارشنبه 05 اسفند 1394, 20:28 عصر
جناب رحیمی من میخام به فرم بالانس مالی شبیه زیر طراحی کنم
و با این سکلت ها مقدار ها رو گرفتم
به نظر شما چطور اونارو بفرستم به گزارش با توجه به این که هر فیلد از یه جدول هست
میخاستم هر سلکت در یه ستون دیتاگرید قرار بگیره و در اخر جمع کل هر ستون رو بفرستم برای گزارش
الان کل سلکت ها در یه ستون هست .
برای هر سکلت یه دیتاگرید بزارم ایا روش خوبیه یا غیر حرفه ای میشه ؟
ایا پیشنهادی دارید برای ساختن گزارشش
ممنون139273

ژیار رحیمی
چهارشنبه 05 اسفند 1394, 20:36 عصر
در تصویر در هر سلول جمع رکورد های اون حساب یا جدول هست (مثل کل دریافتی از کشاورزان یا پرداختی های آنها) شما در کویری از sum استفاده کن و نتیجه رو که یک عدد مجموع میباشد در سلول مورد نظر در دیتاگرید قرار بده

dataGridView1.CurrentRow.Cells[0].Value = seledaryafti.Sum(c=>c.price);

vB.N3T
پنج شنبه 06 اسفند 1394, 09:51 صبح
جناب رحیمی
من تمام سلکت ها رو زدم و در دیتا گرید ریختم
حتی به گزارش هم فرستادم.الان داشتم برنامه رو تست میکرم همین قسمتی که سلکت میزنه با این خطا مواجه شده.
بعد کل اطلاعات جداول رو دلیت کردم و دومرتبه وارد کردم و برنامه و سکلت ها درست شد
سوالم اینه در اینده این مشکل پیش نیاد موقع نصب برنامه و...
ایا دلیل خاصی داشته که برنامه بی دلیل به اینکه جداول دیتا داشتن این خطا رخ بده !؟
مقدار هم داره جدول.139280

ژیار رحیمی
پنج شنبه 06 اسفند 1394, 10:36 صبح
احتمالا دیتاگرید شما فاقد سطر هست یا CurrentRow به سطر سیستمی دیتاگرید اشاره میکنه (Header گرید) پس CurrentRow دیتاگرید شما null میباشد(بهتره بجای CurrentRow از ایندکس سطر استفاده کنی)