PDA

View Full Version : جمع سطر اول ديتا گريد و سطر دوم در حلقه for



mj_nokhost
جمعه 18 فروردین 1391, 20:13 عصر
با سلام خدمت همه دوستان عزيز .
من تو برنامم يه فرم دارم كه گردش حساب رو نشون ميده
حالا ميخوام موقع گزارشگيري مانده حساب رو نشون بده .

من خودم از حلقه استفاده كردم ولي جوابش درست در نمياد .
جواب درست رو تو عكس ضميمه نوشتم كه اگه ببينيد متوجه سوالم ميشيد .
اين عمليات رو بايد تا اخرين ركورد انجام انجام بشه .
85355
اگه سوالم رو بد مطرح كردم ببخشيد ديگه اخه خيلي استرس دارم پرو‍ژه رو بايد تا 3 روز ديگه تحويل بدم و فقط همين قسمتش مونده .
ممنون از همگي

lastmory
جمعه 18 فروردین 1391, 20:32 عصر
سلام
حلقه دومیه لازم نیست دیگه
اگه دیتا بیس رو میدادی بهتر میتونستم کمکت کنم
adap.Fill(dt)
BS.DataSource = dt
DataGridView1.DataSource = BS

For i As Integer = 0 To DataGridView1.Rows().Count() - 1

Dim mande As Int32 = (DataGridView1.Rows(i).Cells("bed").Value) - (DataGridView1.Rows(i).Cells("bes").Value())

DataGridView1.Rows(i).Cells("mande").Value = mande


Next

mj_nokhost
جمعه 18 فروردین 1391, 20:47 عصر
سلام مرسي از لطفتون ولي فكر كنم سوالم رو درست متوجه نشديد .
به عكس ضميمه نگاه كنيد .
قسمتي كه دورش خط كشيده شده دقيقا بيانگر مطلب هست .
ستون مانده بايد جمع مانده سطر اول + جمع مانده سطر قبل از خودش بشه .
من خودم راههاي زيادي امتحان كردم ولي چون قبل از ركورد اول ركوردي وجود نداره خطا ميگيره يا جواب درست در نمياد .
يه مثال ميزنم نگاه كنيد .
بدهكار بستانكار مانده
5000 0 5000
9000 0 14000
0 3000 11000
من اين رو ميخوام .

lastmory
جمعه 18 فروردین 1391, 20:51 عصر
سلام دوباره
بفرما
:لبخند:
adap.Fill(dt)
BS.DataSource = dt
DataGridView1.DataSource = BS
Dim mande As Int32 = 0
For i As Integer = 0 To DataGridView1.Rows().Count() - 1

mande += (DataGridView1.Rows(i).Cells("bed").Value) - (DataGridView1.Rows(i).Cells("bes").Value())

DataGridView1.Rows(i).Cells("mande").Value = mande


Next

mj_nokhost
جمعه 18 فروردین 1391, 21:03 عصر
ببخشيد يادم رفت بگم اين يه مشكلي داره به اخرين رديف گريد ويو كه مقدار نداره هم مانده اظافه ميكنه .
اشكال از كجاست ؟


اگه اشكال نداره يه سوال ديگه هم ميخوام ازت بپرسم .
اگه خودت بخواي اين كارو انجام بدي تو application انجام ميدي مثل اين مورد يا تو sql
من خودم فكركنم تو applicatio انجام بديم بهينه تره تا sql
نظره شما چيه ؟

lastmory
جمعه 18 فروردین 1391, 21:12 عصر
آره منم همین فکرو میکنم این روش راحتتر هم هست
برای اینکه سطر آخر رو لحاظ نکنه
میتونی قبل از اینکه بدهکار و بستانکار رو از هم کم کنی
شرط بزاری که حداقل یکیشون ، مقدار داشته باشه

فرید نجفلو
جمعه 18 فروردین 1391, 21:13 عصر
دوست عزیز کد زیر رو امتحان کنید:
Dim mande As Integer = 0
For Each aRow As DataGridViewRow In Me.DataGridView1.Rows
Dim Bed = CInt(aRow.Cells("bed").Value)
Dim Bes = CInt(aRow.Cells("bes").Value)
mande += (Bed - Bes)
aRow.Cells("mande").Value = mande
Next


چندتا نکته:
*دیتابیس رو ندادید نتونستم تست کنم
*روشتون اصلا درست نیست چون این روش مانده گیری متغیر خواهد بود(کاربر اگر ستون ها را دوباره مرتب کنه نتیجه فرق می کنه)
*این کار باید در سطح پایگاه داده یا قبل از اختصاص منبع به گرید باشه
*نوع نمایش مانده طبق قوانین حسابداری نیست.تو حسابداری مانده منفی نداریم
مانده همیشه مثبته (مثبت نشون داده میشه) و این ماهیت ماندس که عوض میشه(مانده بدهکار یا بد و مانده بستانکار یا بس)
مخصوصا نکته آخرم همینجوری نگفتم من خودم حسابدارم پس حتما مد نظرتون باشه
اگه کمک بشتری خواستید (مخصوصا تخصصی حسابداری) در خدمتم

mj_nokhost
جمعه 18 فروردین 1391, 21:14 عصر
ممنونم از لطفت خيلي بهم كمك كردي .
باور كن از استرس داشتم ميمردم اصلا نميفهميدم دارم چي كار ميكنم .
بازم ممنون

mj_nokhost
جمعه 18 فروردین 1391, 21:41 عصر
با سلام خدمت دوست گرامي Farid.N (http://barnamenevis.org/member.php?243869-Farid.N)
اره شما درست ميگين.
ولي من امكان اينكه كاربر بخواد ستون هارو مرتب ساري كنه بهش تدادم .
براي مانده منفي هم خدمتتون عرض كنم كه بله بازم درست ميگيد اين نمونه برنامه اي كه گذاشتم فقط يه sample بود .
حالا من جدول اصلي رو براتون ميذارم و شما نظرتونو بگين .
توضيحات جدول gardesh
garcode = كد
nid = نوع سند مثلا 3= فاكتور خريد
shsanad =شماره فاكتور خريد
shakhsid = كد شخص
bed= مبلغ بدهكار
bes = مبلغ بستانكار
vaz = اي ستون وضعيت مانده حساب نيست وضعيت سند رو نشون ميده كه مثلا اگه فاكتور خريد باشه = 1 = بستانكار
pass = يه گذر گاه واسه برنامه هست كه ما بهش فعلا كاري نداريم

ببخشيد من نميدونم چرا نميتونم فايلمو اپ كنم واسه همي ژن كوئري sql رو گذاشتم .

USE [TestN1]
GO

/****** Object: Table [dbo].[GarAshkhas] Script Date: 04/06/2012 10:24:27 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[GarAshkhas](
[garcode] [int] IDENTITY(1,1) NOT NULL,
[nid] [int] NULL,
[shsanad] [int] NULL,
[shakhsid] [int] NULL,
[bed] [bigint] NULL,
[bes] [bigint] NULL,
[vaz] [int] NULL,
[pas] [int] NULL
) ON [PRIMARY]

GO





من منتظر نظرتون هستم .
اگه ميشه شما هم بگيد كه اين عمليات رو از سمت server انجام بدم يا application
ممنون .