En iyi yanıtlayıcılar
datatable'da verileri senelere göre ayırıp ara toplam maaş tutarlarını datagridview'de göstermek

Soru
-
Yanıtlar
-
private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("isim", typeof(string)));
dt.Columns.Add(new DataColumn("yıl", typeof(string)));
dt.Columns.Add(new DataColumn("maaş", typeof(int)));
DataTable son_dt = new DataTable();
son_dt = dt.Copy();
//data girişi
DataRow row = dt.NewRow();
row[0] ="Ali";
row[1] = "2014";
row[2] = 2000;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "Mehmet";
row[1] = "2014";
row[2] = 3000;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "Veli";
row[1] = "2015";
row[2] = 3500;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "Ali";
row[1] = "2015";
row[2] = 2500;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "Mustafa";
row[1] = "2015";
row[2] = 4000;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "Ali";
row[1] = "2016";
row[2] = 5000;
dt.Rows.Add(row);
var veri = dt.AsEnumerable().GroupBy(u => u["yıl"]);
foreach (var item in veri)
{
int toplam_maas = 0;
foreach (var dr in item)
{
toplam_maas += int.Parse(dr["maaş"].ToString());
DataRow drow = son_dt.NewRow();
drow["yıl"] = item.Key.ToString();
drow["isim"] = dr["isim"].ToString();
drow["maaş"] = dr["maaş"].ToString();
son_dt.Rows.Add(drow);
}
DataRow totalRow = son_dt.NewRow();
totalRow["yıl"] = "Toplam";
totalRow["maaş"] = toplam_maas.ToString();
son_dt.Rows.Add(totalRow);
}
DataRow total2Row = son_dt.NewRow();
total2Row["yıl"] = "Genel Toplam";
total2Row["maaş"] = Convert.ToDouble(dt.Compute("SUM(maaş)", ""));
son_dt.Rows.Add(total2Row);
dataGridView1.DataSource = son_dt;
}nigDELI
- Yanıt Olarak İşaretleyen Emin DOĞU 26 Kasım 2020 Perşembe 15:22
Tüm Yanıtlar
-
void Main() { var myData = new List<Data>(){ new Data(){Name="Ali",Year=2014,Salary=2}, new Data(){Name="Mehmet",Year=2014,Salary=3}, new Data(){Name="Veli",Year=2015,Salary=3.5m}, new Data(){Name="Ali",Year=2015,Salary=2.5m}, new Data(){Name="Mustafa",Year=2015,Salary=4}, new Data(){Name="Ali",Year=2016,Salary=5}, }; myData.GroupBy(x=>x.Year).Select(x=> x.Sum(y=>y.Salary)).Dump(); } public sealed class Data { public string Name{get;set;} public int Year{get;set;} public decimal Salary {get;set;} }
-
çok özür diliyorum ama bilgimin yetersiz olması sebebiyle anladığım sadece 1 satır linq koduyla sorunu hallettiğiniz. sizden ricam direk datatable üzerinden örnek verebilirseniz benimde datagridviewe bağlamam kolay olur. yine affınıza sığınarak 1 satırla bu iş yapılabilir mi?
nigDELI
-
Şu şekilde deneyebilirsiniz Emin bey :
void Main() { #region LuzumsuzSatirlar var myData = new List<Data>(){ new Data(){Name="Ali",Year=2014,Salary=2}, new Data(){Name="Mehmet",Year=2014,Salary=3}, new Data(){Name="Veli",Year=2015,Salary=3.5m}, new Data(){Name="Ali",Year=2015,Salary=2.5m}, new Data(){Name="Mustafa",Year=2015,Salary=4}, new Data(){Name="Ali",Year=2016,Salary=5}, }; var dTable = new DataTable(); dTable.Columns.Add("Name"); dTable.Columns.Add("Year"); dTable.Columns.Add("Salary"); dTable.Columns[1].DataType= typeof(Int32); dTable.Columns[2].DataType= typeof(decimal); foreach(var veri in myData){ DataRow _row = dTable.NewRow(); _row["Name"] = veri.Name; _row["Year"] = veri.Year; _row["Salary"] = veri.Salary; dTable.Rows.Add(_row); } #endregion myData.GroupBy(x=>x.Year).Select(x=> x.Sum(y=>y.Salary)).Dump(); Console.WriteLine(dTable); Console.WriteLine(dTable.AsEnumerable().GroupBy(x=>x.Field<int>("Year")).Select(x=> new{ Year=x.Key , Total= x.Sum(y=> (decimal)y.Field<decimal>("Salary"))})); } public sealed class Data { public string Name{get;set;} public int Year{get;set;} public decimal Salary {get;set;} }
-
ne yazıkki kodunuz çözüm değil. dump genişletme metodu bulunamadı hatasının dışında kodunuzu projeye adapte edebilmem de olanaksız gibi duruyor. lüzumsuz satırlar lüzumsuzsa neden ekli? benim datatable'min içi zaten verdiğim örnekteki gibi dolu. yoksa ben bunu datagrid de nasıl göstereyim? sadece senelere göre row eklenecek ama zıkkım kodun emsali internette yok malesef!
nigDELI
-
-
table ye row ekliyoruz yılı ben string belirttiysem yıl yerine "toplam" da yazabilirim. mehmet emin kaymaz beyin yolundan giderek sorunu çözdüm. hatta tek satır daha az kodla. bu sorunu yaşayanlar için tam bir örnek vereceğim. zaman yetersizliğinden yarın paylaşacağım inşallah. çok basit olsa da formlarda yanıtı olmayan bir konu olmuş olacak.
nigDELI
-
private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("isim", typeof(string)));
dt.Columns.Add(new DataColumn("yıl", typeof(string)));
dt.Columns.Add(new DataColumn("maaş", typeof(int)));
DataTable son_dt = new DataTable();
son_dt = dt.Copy();
//data girişi
DataRow row = dt.NewRow();
row[0] ="Ali";
row[1] = "2014";
row[2] = 2000;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "Mehmet";
row[1] = "2014";
row[2] = 3000;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "Veli";
row[1] = "2015";
row[2] = 3500;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "Ali";
row[1] = "2015";
row[2] = 2500;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "Mustafa";
row[1] = "2015";
row[2] = 4000;
dt.Rows.Add(row);
row = dt.NewRow();
row[0] = "Ali";
row[1] = "2016";
row[2] = 5000;
dt.Rows.Add(row);
var veri = dt.AsEnumerable().GroupBy(u => u["yıl"]);
foreach (var item in veri)
{
int toplam_maas = 0;
foreach (var dr in item)
{
toplam_maas += int.Parse(dr["maaş"].ToString());
DataRow drow = son_dt.NewRow();
drow["yıl"] = item.Key.ToString();
drow["isim"] = dr["isim"].ToString();
drow["maaş"] = dr["maaş"].ToString();
son_dt.Rows.Add(drow);
}
DataRow totalRow = son_dt.NewRow();
totalRow["yıl"] = "Toplam";
totalRow["maaş"] = toplam_maas.ToString();
son_dt.Rows.Add(totalRow);
}
DataRow total2Row = son_dt.NewRow();
total2Row["yıl"] = "Genel Toplam";
total2Row["maaş"] = Convert.ToDouble(dt.Compute("SUM(maaş)", ""));
son_dt.Rows.Add(total2Row);
dataGridView1.DataSource = son_dt;
}nigDELI
- Yanıt Olarak İşaretleyen Emin DOĞU 26 Kasım 2020 Perşembe 15:22