باسلام خدمت دوستان
من یه پروژه WPF دارم تمرین میکنم
تو دیتا گریدم تعداد ردیف های دیتا گرید رو با int num = dgTajhiz.Items.Count بدست میارم
حالا میخوام همین شمارش رو با شرط انجام بدم
توضیح :تعداد تجهیزات رو به دست اوردم حالا یه ستون دیگه دارم که فعال و غیر فعال هارو توش مشخص کردم حالا میخوام تعداد فعال ها و غیر فعال هارو هم به دست بیارم
همین کارو میخوام برای جمع هم انجام بدم یعنی جمع کل و جمع شرطی
از دیتا بیس میتونم بگیرم اینهارو ولی چون اطلاعات تو دیتاگرید هست نمیخام بیخودی به دیتا بیس مراجعه کنم
ممنون میشم راهنمایم کنید
private void RowSum()
{
//تعداد کل تجهیزات
int num = dgTajhiz.Items.Count;
totTajhizID.Text = num.ToString();
//تعداد تجهیزات فعال
//تعداد تجهیزات غیر فعال
}
سلام. دوست عزیز شما این کار رو از دیتابیس انجام بده خیلی بهتره. شما نوشتی نمیخام بیخودی به دیتابیس مراجعه کنم! اتفاقا برعکس سلکت زدن از دیتابیس هم سرعت بیشتری نسبت به دیتاگرید داره و هم راحت تره! مخصوصا وقتی سلکت شما دارای شرط هستش. ولی به هر حال اگه میخوایید از خود دیتاگرید سلکت بزنید از روش زیر استفاده کنید.
به فرض اینکه شماره اندکس ستون شرطی شما 5 باشه یعنی ششمین ستون در دیتاگرید و خروجی مقدار ستون هم از نوع رشته "فعال" و "غیرفعال" باشه.
int Count = 0;
foreach (var item in MyDataGrid.Items)
{
string ActiveColumns = (MyDataGrid.SelectedCells[5].Column.GetCellContent(item) as TextBlock).Text;
if (ActiveColumns == "فعال") { Count += 1; }
}
int ActiveCount = Count;
int InactiveCount = MyDataGrid.Items.Count - Count;
در کد بالا ActiveCount مقدار ردیف های فعال و InactiveCount مقدار ردیف های غیرفعال رو شمارش میکنه.
ولی باز تاکید میکنم روش بالا روش استاندارد و صحیحی نیست و وقتی که تعداد ردیف های دیتاگرید از یه حدی بیشتر بشه سرعت اجرای تابع کند میشه. و توصیه میشه این کار رو از طریق سلکت زدن از دیتابیس انجام بدید.
موفق باشید.
ممنون ازتون
من برداشتم برعکس بود فکر میکردم هرچی کمتر به دیتابیس مراجعه کنم بهتره
بازم ممنون از لطفتون
البته اشتباه نبابد بشه
اگر شما در کوئری که به دیتابیس میفرستید همه اطلاعات رو دارید دیگهنیازی نیست مجدد کوئری بفرستید و میتونید همونجا اطلاعات رو بدست بیارید.
مثلا
int numActive = dgTajhiz.Items.where(t => t.Status ==1).Count
در کوئری بالا فرض شده که دستگاههای فعال و غیرفعال توسط فیلد Status از هم جدا میشن.
به این ترتیب در کوئری بالا تعداد فعالها بدست میاد.
برای غیر فعالها هم میشه به همین ترتیب انجام داد
کمی گیج شدم الان
ببینید من توو کوئری که به دیتابیس برای دیتاگرید میزنم همیشه اطلاعات مورد نیازم رو به دیتا گرید میارم
و اگه هم فیلتری روی دیتا گرید بزنم با کوئری فیلتر میکنم
حالا با این اوصاف برای ردیف مجموع که با استفاده از چند تا تکس باکس میخوام نمایش بدم از دیتاگرید استفاده کنم
یا
برای اونها هم با کوئری از دیتابیس بگیرم ؟؟؟
من تصورم این بود که هرچی کمتر به دیتا بیس مراجعه کنم بهتره از بابت سرعت برنامه میگم چون قرار تحت شبکه باش؟؟
خواستم از
int numActive = dgTajhiz.Items.where(t => t.Status ==1).Count
استفاده کنم متد Where نداشت !؟
برای سلکت زدن از دیتاگرید باید از حلقه for یا foreach استفاده کرد. ولی از اونجایی که برنامه شما تحت شبکه هست بازم توصیه میکنم از سلکت دیتابیس استفاده کنید تا در صورت تغییر در دیتابیس توسط کلاینت ها، همیشه آخرین تغییرات رو داشته باشید.
با سلام
بهتر بود کدهای خودتون و خروجی کار رو کامل نمایش میدادید تا سایر برنامهنویسان با دید بازتری پاسخ بدن.
الان مشخص نیست تعداد تجهیزات فعال غیر فعال که شما گفتید توی کوئری شما وجود داره یا خیر.
این کد
/// ////متد ارتباط با پایگاه داده و نمایش اطلاعات در دیتاگرید
private void ShowTajhizInfo(Func<string> SearchStringForTajhizs)
{
var query = DbVahdat.Database.SqlQuery<ViewTajhiz>
("SELECT TajhizID, Tajhiz, Mahal, TarikhNasb, Andaze, TajhizVazn, Zarfiyat, TarikhSakht, HalattajhizOlaviyat, TajhizTozih, Bakhsh, UserFamili, Sazande FROM ViewTajhiz Where 1=1 "
+ SearchStringForTajhizs());
//MessageBox.Show(query.ToString());
var q = query.ToList();
dgTajhiz.ItemsSource = q;
RowSum();
}
اینم دیتا گریدم
تاریخ :
1403/06/24
- ساعت :
08:52:00 PM
- بازدید :
319
- پاسخ :
1
|
تاریخ :
1398/09/16
- ساعت :
11:41:00 AM
- بازدید :
4284
- پاسخ :
1
|
تاریخ :
1398/09/07
- ساعت :
02:15:00 PM
- بازدید :
3877
- پاسخ :
5
|
تاریخ :
1403/05/16
- ساعت :
05:43:00 AM
- بازدید :
662
- پاسخ :
0
|
تاریخ :
1398/09/05
- ساعت :
06:04:00 PM
- بازدید :
3174
- پاسخ :
2
|
تاریخ :
1403/04/12
- ساعت :
07:27:00 PM
- بازدید :
658
- پاسخ :
0
|
تاریخ :
1398/09/14
- ساعت :
09:43:00 PM
- بازدید :
3316
- پاسخ :
2
|
تاریخ :
1398/09/17
- ساعت :
12:33:00 AM
- بازدید :
5857
- پاسخ :
2
|
تاریخ :
1402/04/18
- ساعت :
02:50:00 PM
- بازدید :
1230
- پاسخ :
1
|
تاریخ :
1402/01/19
- ساعت :
12:30:00 PM
- بازدید :
1560
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2013
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
80
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
114
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1034
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
431
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
931
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1357
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4800
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1161
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
599
- پاسخ :
1
|