جمع مقادیر یک ستون در دیتاگریدویو در WPF
سلام دوستان
من یک دیتاگرید توی محیط WPF دارم و یک ستون به نام مبلغ هستش که میخوام جمع مبالغ ستون رو به دست بیارم و بریزم توی یک لیبل،
این کد رو نوشتم اما خطا میده
double sum = 0;
for (int i = 0; i < dgPart.Items.Count; i++)
{
sum += Convert.ToDouble((dgPart.SelectedCells[4].Column.GetCellContent(i) as TextBlock).Text);
}
lblInvoicePrice.Content = sum.ToString();
اینم خطا:
Additional information: Specified argument was out of the range of valid values.
که برای این خط کد میگیره
sum += Convert.ToDouble((dgPart.SelectedCells[0].Column.GetCellContent(i) as TextBlock).Text);
رفع خطای Specified argument was out of the range of valid values
دو احتمال وجود داره :
احتمال اول : خب در واقع خطای شما این هست که شما یک متغیر به نام Sum از نوع double تعریف کردید و در یک حلقه for مقادیر رو داخلش ریختید و با هم جمع کردید. ولی احتمالا مبالغی که شما دارید و با هم جمع زدید مبلغ بسیار بزرگی هست و مقدارش بیشتر از مقدار یک متغیر double شده.
احتمال دوم : احتمال دوم که بیشتر باید بهش دقت کنید این هست که ممکنه در Position با شماره 0 که خطای شما هم در همون خط هست مقداری وجود نداره و در واقع مقادیر از 1 شروع میشه. یعنی توی حلقه i رو از 1 شروع کنید. لینک زیر رو بخونید بهتر متوجه می شید.
با سلام و احترام.
دوست گرامی مشکل شما به این دلیل هست که شما حلقه for رو مستقیما روی سلولهای دیتاگرید قرار دادید که این امر کاملا اشتباه است. اولا دلیل خطا اینه که دیتاگریدها به یکدفعه کل دیتاسورس خودشو لود نمیکنه مگر اینه خاصیت EnableRowVirtualization دیتاگرید رو برابر با false قرار بدید که این کار هم اشتباه هست چون سرعت لود دیتاگرید در سلکت های سنگین به شدت پایین میاد. ثانیا این روشی که برای بدست آوردن جمع یک ستون استفاده کردید اصلا درست نیست! لطفا به روش زیر عمل کنید.
فرض بر این میگیریم که دیتاگرید شما به جدولی با نام Users متصل هست و یک ستون هم در دیتاگرید دارید با نام Fee که میخواهید جمع این ستون رو در لیبل نشون بدید.
double TotalFee = Convert.ToDouble(db.Users.Sum(x => x.Fee));
در کد بالا db همون نام شیء دیتابیسی هست که تعریف کردید. حالا کافیه مقدار TotalFee رو توی لیبل خودتون بریزید. اگر میخواهید در زمان فیلتر کردن دیتاگرید دقیقا همون جمع موارد فیلتر شده رو نشون بده در کد بالا به جای db.Users همون مقدار دیتاسورسی رو قرار بدید که به دیتاگرید متصل کردید.
شما خب دیتاگرید خودتون رو با یک کوئری بایند کردید دیگه. احتمالا به شکل زیر
var ds = db.Database.SqlQuery<Users>("select * from Users").ToList();
Datagrid.ItemsSource = ds;
double TotalFee = Convert.ToDouble(ds.Sum(x => x.Fee));
Mylable.Content = TotalFee;
تو کد بالا ds همون دیتاسورسی هست که به دیتاگرید متصل شده. دو خط آخر کد بالا رو دقیقا زیر قسمتی که دیتاگرید رو بایند کردید قرار بدید فقط بجای مقادیر تستی مقادیر خودتون رو قرار بدید.
بازم اگه موفق نشدید کدهایی که نوشتین رو قرار بدید تا روی کدهای خودتون مثال بزنم.
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول