دسته بندی ها
23:06 1399/08/27

محاسبه مجموع مقادیر یک ستون در DataGridView و مرتب سازی اطلاعات

مشخصات سوال کننده :
کاربر : Mahhsa     امتیاز کاربر : 0     رتبه کاربر : 7070
دسته بندی : سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3384
2 نظر
saedbfd : بهتر هست که کدهایی که نوشتید و فیلدهایی که توی دیتابیس دارید هم بگید. با این توضیحات فقط میشه یه سری توضیحات کلی داد و هیچ پاسخ دقیقی که به درد شما بخوره نمیشه ارائه داد.

امتیاز کاربر : 1664   رتبه کاربر : 1   تاریخ ثبت : 11:24 1399/08/27
Mahhsa : برنامه من به این شکل هست که اول باید اطلاعات پرونده رو از یک فرم دیگه جستجو کنم و بعد شماره پرونده مورد نظرم رو به فرم انتقال بدم و بعد کارشناسی که مورد نظر هست بر اساس چند شرط جستجو کنم و بعد از انتخاب کارشناس مورد نظر اطلاعات کارشناس و شماره پرونده رو به یک فرم دیگه انتقال بدم و اونجا مبلغ قرار داد رو وارد کنم و در پایگاه داده م ذخیره کنم.حالا توی مرحله جستجو کارشناس من باید مبلغ تمامی قراردادهایی که باهاش بسته شده رو توی فیلد مبالغ دریافتی قرار بدم که برای پرونده دیگه کسی که کمترین دستمزد رو تا حالا داشته انتخاب بشه که بتونیم عدالت رو د موردشون رعایت کنیم.عکس های مربوط به فرم ها و فیلد های جدول رو قرار میدم اگه امکانش باشه

امتیاز کاربر : 0   رتبه کاربر : 7070   تاریخ ثبت : 04:37 1399/08/29
هوش مصنوعی

پاسخ هوش مصنوعی

برای محاسبه مجموع مقادیر یک ستون در 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 متصل کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 20:49 1399/08/28

به طور کلی وقتی شما اطلاعات رو از دیتابیس می خونید و میخواید توی 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 و محاسبه جمع سطرهای انتخاب شده

به این پاسخ امتیاز بدهید    1
امتیاز: 1635 رتبه: 2
1 نظر
Mahhsa : متاسفانه این روش برای من جواب نمیده چون نمیخوام که کاربر انتخاب کنه من میخوام که وقتی مبلغ رو کاربر وارد میکنه خود به خود با مقدار قبلی جمع بشه و در پایگاه داده قرار بگیره و وقتی که سرچ میکنم مجموع کل رو توی جستجوم نشون بده

امتیاز کاربر : 0   رتبه کاربر : 7070   تاریخ ثبت : 06:15 1399/09/02
پاسخ دهنده : Mahhsa 17:12 1399/08/29

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

در این مرحله اطلاعات گرفته شده از دیتاگرید نمایش داده میشه و فقط فیلد مبلغ قرارداد خالی هست که باید مبلغ وارد بشه و در پایگاه داده ذخیره بشه.

حالا من سوالی که دارم این هست که چطور هر بار که مبلغ قرارداد رو وارد میکنیم با مقدار قبلیش جمع بشه و ذخیره بشه که توی سرچ بعدی مقدار جمع شده رو نمایش بده ؟

ستون های جدول کارشناس هم شامل شناسه (id)، شماره پرونده کارشناس،شماره پروانه کارشناس ، اطلاعات فردی ،شماره حساب و حوزه قضایی و... که توی عکس دوم میتونین تمام ستون ها رو مشاهده کنین 

ویرایش شده در پنج شنبه 29 آبان 1399 ساعت 18:32:39
به این پاسخ امتیاز بدهید    0
امتیاز: 0 رتبه: 7070
پاسخ دهنده : AliSeifi 13:49 1399/09/30

شما باید جدول مربوطه رو در واقع ویرایش کنید. به شکل زیر:

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 داشته باشید.

===

اگر جایی رو متوجه نشدین بگین تا بیشتر توضیح بدم.


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

ویرایش شده در یکشنبه 30 آذر 1399 ساعت 13:59:28
به این پاسخ امتیاز بدهید    0
امتیاز: 5 رتبه: 110
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود