با سلام خدمت استاد عزیزم
من یک لیست دارم که ستون گردش بدهکار و گردش بستانکار رو داره (Bed=گردش بدهکار،Bes=گردش بستانکار)
دو تا ستون دیگه دارم به اسم مانده بدهکار و مانده بستانکار (MandehBed=مانده بدهکار،MandehBes=مانده بستانکار)
می خوام با یک حلقه foreach در هر ردیف مانده بدهکار و مانده بستانکار را حساب کنم و بریزم تو ستون های مانده بدهکار و مانده بستانکار
مشکلی که دارم اینه که داخل حلقه دو تا ستون رو به دست میارم ولی نمی دونم به جه صورت باید دو تا ستون لیستم رو آپدیت بکنم و مقادیر به دست آمده رو بریزم داخل این دو تا ستون ؟
خیلی سرچ کردم نتونستم به راه حل برسم . ممنون میشم راهنمایی بفرمائید .
private void BindGridTaraz()
{
using (UnitOfWork db = new UnitOfWork())
{
var vdetail = db.recPayRipository.GetAllAccVoucherDetail();
var Account = db.accountRipository.GetAllAccounts();
var Vtype = db.accountRipository.GetAllAccountType();
var VoucherBalance = (from v in vdetail
join a in Account on v.AccountId equals a.AccountId
join t in Vtype on a.AccountType equals t.AccountTypeId
group v by a.AccountDesc into g
select new
{
AccountDesc = g.Key,
AccountId = g.Select(v => v.AccountId).FirstOrDefault(),
Bed = g.Select(v => v.Bed).Sum(),
Bes = g.Select(v => v.Bes).Sum(),
MandehBed=0,
MandehBes= 0
}).ToList();
long mandehBed = 0;
long mandehBes = 0;
foreach(var a in VoucherBalance)
{
if(a.Bed>a.Bes)
{
mandehBed = a.Bed - a.Bes;
mandehBes = 0;
}
else
{
mandehBes = a.Bes - a.Bed;
mandehBed = 0;
}
}
dgvPersonReport.DataSource = VoucherBalance;
//GridEXRow[] rows = dgvPersonReport.GetRows();
//long Mandeh = 0;
//foreach (GridEXRow row in rows)
//{
// int ID = int.Parse(row.Cells[0].Value.ToString());
// var rowvoucherDetail = (from v in VoucherBalance
// join a in Account on v.AccountId equals a.AccountId
// where (v.AccountId == ID)
// select new
// {
// AccountId = v.AccountId,
// AccountType = a.AccountType
// }).SingleOrDefault();
// if (rowvoucherDetail.AccountType == 1 || rowvoucherDetail.AccountType == 4)
// {
// Mandeh = (int.Parse(row.Cells[2].Value.ToString())) - (int.Parse(row.Cells[3].Value.ToString()));
// if (Mandeh > 0)
// {
// row.Cells[4].Text = Mandeh.ToString("#,##");
// }
// else
// {
// row.Cells[5].Text = Mandeh.ToString("#,##");
// }
// }
// else
// {
// int rr = row.RowIndex;
// Mandeh = (int.Parse(row.Cells[3].Value.ToString())) - (int.Parse(row.Cells[2].Value.ToString()));
// if (Mandeh > 0)
// {
// row.Cells[5].Text = Mandeh.ToString("#,##");
// }
// else
// {
// row.Cells[4].Text = Mandeh.ToString("#,##");
// }
// }
//}
}
}
سلام
منظورتون رو متوجه نمیشم
در دوره من مانده حساب رو بدست آوردم از همون مثال استفاده کنید
شما مانده کل رو تو یه خط حساب کردین من میخوام مانده هر حساب معین رو توی هر ردیف لیست محاسبه بکنم در واقع برای هر حساب معین جمع گردش بدهکار و گردش بستانکار رو حساب کردم الان میخوام توی لیست تو هر ردیف واسه حساب هایی که ماهیت بدهکار دارند گردش بدهکار رو منهای گردش بستانکار بکنه و تو ستون مانده بدهکار بریزه و حساب هایی که ماهیت بستانکار دارند گردش بستانکار رو منهای گردش بدهکار بکنه و بریزه تو ستون مانده بستانکار
شما مانده کل رو تو یه خط حساب کردین من میخوام مانده هر حساب معین رو توی هر ردیف لیست محاسبه بکنم در واقع برای هر حساب معین جمع گردش بدهکار و گردش بستانکار رو حساب کردم الان میخوام توی لیست تو هر ردیف واسه حساب هایی که ماهیت بدهکار دارند گردش بدهکار رو منهای گردش بستانکار بکنه و تو ستون مانده بدهکار بریزه و حساب هایی که ماهیت بستانکار دارند گردش بستانکار رو منهای گردش بدهکار بکنه و بریزه تو ستون مانده بستانکار
متوجه شدم
نمیفهمم مشکل شما کجاست
لطفا فقط کد مشکل دار را قرار دهید و توضیح بدید مشکل کجاست
var VoucherBalance = (from v in vdetail
join a in Account on v.AccountId equals a.AccountId
join t in Vtype on a.AccountType equals t.AccountTypeId
group v by a.AccountDesc into g
select new
{
AccountDesc = g.Key,
AccountId = g.Select(v => v.AccountId).FirstOrDefault(),
Bed = g.Select(v => v.Bed).Sum(),
Bes = g.Select(v => v.Bes).Sum(),
MandehBed=0,
MandehBes= 0
}).ToList();
long remainbed = 0;
long remainbes = 0;
foreach(var a in VoucherBalance)
{
if(a.Bed>a.Bes)
{
remainbed = a.Bed - a.Bes;
remainbes = 0;
}
else
{
remainbes = a.Bes - a.Bed;
remainbed = 0;
}
a.MandehBed = remainbed;
a.MandehBes = remainbes;
}
دو خط آخر خطا داره تصویر خطا شو میزارم براتون این زیر
باید convert کنید تو long
سلام استاد با تشکر از پاسخ گویی شما
من دو تا پروپرتی mandehBedو mandeBes رو cast کردم به long ولی بازم درست نشد .
شاید منظور شما رو خوب متوجه نشدم ؟
تو سایت استک فلو خوندم نوشته بود تو حلقه فورایچ نمیشه لیست ها رو آپدیت کرد . اگر بخواهین آپدیت کنین باید از حلقه فور استفاده کنین . اگه بخوام از حلقه فور استفاده کنم به چه صورتی باید استفاده بکنم .
var VoucherBalance = (from v in vdetail
join a in Account on v.AccountId equals a.AccountId
join t in Vtype on a.AccountType equals t.AccountTypeId
group v by a.AccountDesc into g
select new
{
AccountDesc = g.Key,
AccountId = g.Select(v => v.AccountId).FirstOrDefault(),
Bed = g.Select(v => v.Bed).Sum(),
Bes = g.Select(v => v.Bes).Sum(),
MandehBed=(long)0,
MandehBes= (long)0
}).ToList();
long remainbed = 0;
long remainbes = 0;
foreach(var a in VoucherBalance)
{
if(a.Bed>a.Bes)
{
remainbed = a.Bed - a.Bes;
remainbes = 0;
}
else
{
remainbes = a.Bes - a.Bed;
remainbed = 0;
}
a.MandehBed = remainbed;
a.MandehBes = remainbes;
}
باید index عنصر مورد نظر را بدست بیارید و اون رو بروز کنید
با متد FindIndex میتونید بدست بیارید
ممنون استاد . با فاین ایندکس نتونستم حلش کنم . مجبور شدم بریزم تو یه ویو مدل و اونو تو حلقه استفاده کنم
var VoucherBalance = (from v in vdetail
join a in Account on v.AccountId equals a.AccountId
join t in Vtype on a.AccountType equals t.AccountTypeId
group v by a.AccountDesc into g
select new
{
AccountDesc = g.Key,
AccountId = g.Select(v => v.AccountId).FirstOrDefault(),
Bed = g.Select(v => v.Bed).Sum(),
Bes = g.Select(v => v.Bes).Sum(),
MandehBed=(long)0,
MandehBes= (long)0
}).AsEnumerable().ToList();
long remainbed = 0;
long remainbes = 0;
for (int i = 0; i < VoucherBalance.Count; i++)
{
var mybalance = VoucherBalance.ElementAt(i);
if (mybalance.Bed > mybalance.Bes)
{
remainbed = mybalance.Bed - mybalance.Bes;
remainbes = 0;
}
else
{
remainbes = mybalance.Bes - mybalance.Bed;
remainbed = 0;
}
List<BalanceReportViewModel> balance = new List<BalanceReportViewModel>();
balance.Add(new BalanceReportViewModel()
{
AccountDesc = mybalance.AccountDesc,
AccountId = mybalance.AccountId,
Bed = mybalance.Bed,
Bes = mybalance.Bes,
MandehBed =remainbed,
MandehBes =remainbes
});
dgvPersonReport.DataSource = balance;
}