محاسبه مجموع مقادیر یک ستون در DataGridView و مرتب سازی اطلاعات
سلام خدمت دوستان و اساتید گرامی.من یک فرم توی برنامه م دارم که برای تخصیص پرونده به کارشناسای مورد نظرم طراحی کردم.سوالی که داشتم اینه که وقتی پرونده ای رو میخوام اختصاص بدم مبلغ رو که وارد میکنم و ذخیره میشه چطوری توی سرچ وقتی که جستجو رو انجام میدم مجموع همه دستمزد ها برای کارشناس رو میتونم نشون بدم و بر اساس بیشترین دستمزد لیست کارشناسان رو مرتب کنم ؟کلید اصلی جدول کارشناسانم شماره پرونده کارشناس هست که با fileNo ذخیره کردم
پاسخ هوش مصنوعی
برای محاسبه مجموع مقادیر یک ستون در DataGridView و مرتب سازی اطلاعات، می توانید از LINQ در C# بهره ببرید. به عنوان مثال، فرض کنید که اطلاعات کارشناس ها و دستمزدها در یک لیست موجود است. شما می توانید مجموع دستمزدها را با استفاده از LINQ محاسبه و سپس داده ها را مرتب سازی کنید.
در زیر نمونه ای از کد برای انجام این کار آورده شده است:
C#
// فرض کنید شما یک کلاس دارید به نام Expert که شامل fileNo و amount می باشد.
public class Expert
{
public string FileNo { get; set; }
public decimal Amount { get; set; }
}
// سپس با استفاده از LINQ مجموع دستمزدها را محاسبه و مرتب کنید.
List experts = new List
{
new Expert { FileNo = "1", Amount = 1000 },
new Expert { FileNo = "2", Amount = 1500 },
new Expert { FileNo = "1", Amount = 500 },
new Expert { FileNo = "3", Amount = 2000 }
};
// محاسبه مجموع دستمزد برای هر کارشناس
var expertSums = experts.GroupBy(e => e.FileNo)
.Select(g => new
{
FileNo = g.Key,
TotalAmount = g.Sum(e => e.Amount)
})
.OrderByDescending(e => e.TotalAmount)
.ToList();
// حالا می توانید این اطلاعات را به DataGridView اضافه کنید
dataGridView1.DataSource = expertSums.ToList();
این کد ابتدا لیستی از کارشناسان و دستمزدهای آن ها را می سازد، سپس با استفاده از GroupBy و Sum مجموع دستمزدها را محاسبه می کند و در نهایت بر اساس مجموع دستمزدها لیست را مرتب می نماید. سپس می توانید داده ها را به DataGridView متصل کنید.
به طور کلی وقتی شما اطلاعات رو از دیتابیس می خونید و میخواید توی DataGridView نمایش بدید از یک حلقه استفاده می کنید. در این حلقه هر ستونی که بخواید میتونید مجموع مقادیرش رو بدست بیارید. به عنوان مثال کد زیر رو در نظر بگیرید
private void ShowUserInfo(string SearchStatment)
{
var query = database.Database.SqlQuery<Product>("Select * From Product);
var result = query.ToList();
if (result.Count != 0)
{
long Total_Price = 0;
for (int I = 0; I <= result.Count - 1; I++)
{
DataGridView1.Rows[I].Cells["ID"].Value = result[I].ID;
DataGridView1.Rows[I].Cells["Price"].Value = result[I].Price;
DataGridView1.Rows[I].Cells["ProductName"].Value = result[I].ProductName;
Total_Price += result[I].Price;
}
}
در کد بالا اطلاعات را از دیتابیس خوندیم و در DataGridView1 نمایش میدیم. یک متغیر به نام Total_Price هم تعریف کردیم که در هر باز اجرای حلقه مقدار Price رو با مقادیر قبلی جمع می کنه و مقدار کلی رو بدست میاره.
انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده

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

در این مرحله اطلاعات گرفته شده از دیتاگرید نمایش داده میشه و فقط فیلد مبلغ قرارداد خالی هست که باید مبلغ وارد بشه و در پایگاه داده ذخیره بشه.
حالا من سوالی که دارم این هست که چطور هر بار که مبلغ قرارداد رو وارد میکنیم با مقدار قبلیش جمع بشه و ذخیره بشه که توی سرچ بعدی مقدار جمع شده رو نمایش بده ؟
ستون های جدول کارشناس هم شامل شناسه (id)، شماره پرونده کارشناس،شماره پروانه کارشناس ، اطلاعات فردی ،شماره حساب و حوزه قضایی و... که توی عکس دوم میتونین تمام ستون ها رو مشاهده کنین
شما باید جدول مربوطه رو در واقع ویرایش کنید. به شکل زیر:
var query=(from t in databse.TableName where t.id == ExpertID select t).SingleOrDefault();
// database: نامی که برای مدل دیتابیست در نظر گرفتی
// TableName: نام جدول مورد نظر برای ذخیره اطلاعات
// ExpertID: آیدی کارشناسی که قراره اطلاعات براش ثبت انجام شه و میتونی به شکل زیر با کلیک روی هر ردیف از دیتاگرید ویو بدست بیاریش:
int ExpertID = DataGridView.SelectedRows.Cells["id"].Value;
دستور برای ذخیره و جمع با مبلغ قبلی:
query.Price += txtPrice.text;
database.SaveChange();
// price: نام فیلد مبلغ در دیتابیس
// همچنین با توجه به نوع داده ای که در دیتابیس در نظر گرفتی برای جمع مبالغ باید تبدیل های مورد نیاز رو انجام بدی.
===
در کل دستورات لازم به شکل زیر میشه که باید در رویداد کلیک دکمه یا ... مورد نظر فراخوانی شوند:
}
int ExpertID = DataGridView.SelectedRows.Cells["id"].Value;
var query=(from t in databse.TableName where t.id == ExpertID select t).SingleOrDefault();
query.Price += txtPrice.text;
database.SaveChange();
{
===
همچنین برای جلوگیری از بوجود اومدن خطا در فیلد قیمت در ابتدا باید یک مقدار 0 داشته باشید.
===
اگر جایی رو متوجه نشدین بگین تا بیشتر توضیح بدم.
البته روش بهتر و اصولی این هست که مبالغی که هر سری وارد میشه در یک جدول ذخیره شه و برای نمایش همونجور که دوستمون در بالا گفتن عمل کنید.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول