PDA

View Full Version : جمع کردن یه ستون دیتا گرید



raha1815
چهارشنبه 18 فروردین 1389, 14:37 عصر
ببینید یه datagridview یه ستون تایم داره مثلا با 1000 رکورد ، من میخوام با زدن یه کلید این زمانها با هم جمع بشه فرمت زمان هم اینجوریه به عنوان مثال 04:34:45

با چه دستوراتی این کار و انجام بدم ؟
لطفا کمک کنید کارم گیره .....

Shahram_Shobeiri
چهارشنبه 18 فروردین 1389, 14:51 عصر
اگه تعداد سطر های دیتا گرید ویو زیاد نیست، خب یه for بنداز و دستاً(!) جمع کن.

raha1815
چهارشنبه 18 فروردین 1389, 15:01 عصر
اگه تعداد سطر های دیتا گرید ویو زیاد نیست، خب یه for بنداز و دستاً(!) جمع کن.

ممنون دوست عزیز بله این کار برای اعداد بسیار سادست ولی برای جمع کردن زمان ارور میده احتمالا روش خاصی باید داشته باشه

Shahram_Shobeiri
چهارشنبه 18 فروردین 1389, 15:14 عصر
باید با توابع کار با رشته اول تایم رو تکه تکه کنید. فکر کنم تابع mid واسه این مورد خوب کار کنه. بعد کافیه یک تابع واسه جمع زمان بنویسد که اون هم کار بسیار ساده ایست. هر 60 ثانیه یک دقیقه، هر 60 دقیقه 1 ساعت ...

raha1815
یک شنبه 22 فروردین 1389, 13:17 عصر
سلام
کسی نیست منو بیشتر راهنمایی کنه ؟
لطفا ............

sahele_sheni
یک شنبه 22 فروردین 1389, 13:46 عصر
وقتم داره تموم میشه وگرنه کاملش میکردم واست .....

با این کد میتونی اون ستونهای مورد نظرتو بخونی



Dim time As String
Dim timearr() As String
For counter As Integer = 0 To DataGridView1.Rows.Count
time = DataGridView1.Rows(counter).Cells(ستون مربوط به ساعت ).value
timearr = Split(time, ":")

Next


حالا شما ارایه timearr رو داری که فیلدهای ساعت و دقیقه و ثانیه رو داری .....
موفق باشید

Shahram_Shobeiri
یک شنبه 22 فروردین 1389, 14:23 عصر
مثل اینکه اول آخرش ما باید کد آماده رو واسه شما بنویسیم. به خدا اون راهنمایی هایی که کردم کاملاً کافی بود. کد رو نگاه کنید متوجه میشید که ابداً خارج از اون چیزی نیست که گفتم!

raha1815
یک شنبه 22 فروردین 1389, 18:57 عصر
آقای شهرام و جناب sahele - sheni بسیار سپاسگزارم .
من تازه اول کارم بخام مثل شما بشم کلی وقت لازم دارم ......ممنون

تو برنامه من این ارور و میده :
Input string was not in a correct format.

روی خط :

s += Convert.ToInt16(t(2))

sahele_sheni
یک شنبه 22 فروردین 1389, 23:41 عصر
کدت رو بزار یه نگاهی بهش کنیم با هم

Shahram_Shobeiri
دوشنبه 23 فروردین 1389, 07:36 صبح
اون کد رو من کامل تست کردم. فکر کنم ایرادی نداشته باشه. چه خطایی میده؟ احتمالاً تو ورود دیتا اشتباهی شده. دیتا رو به این شکل وارد کنید. hh:mm:ss

raha1815
دوشنبه 23 فروردین 1389, 22:03 عصر
سلام
ممنون دوستان خوب از توجهتون .....
من تو بانکم که sql 2008 دو تا فیلد دارم که زمان on و off شدنه و فقط تایمه (با تاریخ کاری ندارم )
حالا تو دیتا گریدم یه ستون بعد از این دو تا تعریف کردم که اختلاف این دو تایمو نشون میده
که این اختلاف و اینجوری تعریف کردم :


cmd = New SqlCommand("...., ...., ....,.....,dataon, dataoff, (dataoff-dataon),pastart


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

اروور و روی (t(2)) روی 2 میده فکر کنم البته ....

من یه مشکله دیگه دارم من وقتی مثلا میخام دیتا گرید و بریزم تو تکست باکس اونجا که باید تایم و نشون بده تاریخ و هم نشون میده (عکس و ببینین )من اصلا با تاریخ کاری ندارم . چطوری تاریخ و حذف کنم ؟

شاید این اروری که دارم به این خاطرم باشه ! من تو sql این 2 تا فایل و datatime تعریف کردم .
ببخشید زیاد حرف زدم ...
http://picasion.com/resize20/fa6ab7457bb8efb7d26322d35e365e73.jpg

iman_me
دوشنبه 23 فروردین 1389, 23:22 عصر
ای بابا چرا اینقدر گیج میکنید بنده ای خدا رو
اقا اگه با Sql کار میکنی خودش تابع Sum داره

raha1815
سه شنبه 24 فروردین 1389, 07:42 صبح
سلام
خو ب تو برنامه چطوری استفاده کنم ازش ؟

Shahram_Shobeiri
سه شنبه 24 فروردین 1389, 13:09 عصر
ما کسی رو گیج نکردیم. به عنوان سئوال یه نگاه بنداز ...... حرفی از sql server درش زده شده؟ شما هم که اهل گیج کردن نیستی یه مثال درست بگذار و از کلی گویی خودداری کن!

این کوئری مجموع اختلاف زمان های on و off رو نشون میده :


SELECT SUM(on_time) - SUM(off_time) FROM time_tab
شما پس از اینکه زمان های ثبت شده توسط کاربر رو تو بانک ذخیره کردی، این کوئری رو اعمال کن و نتیجه اون رو هر جا که می خواهی نمایش بده

Shahram_Shobeiri
سه شنبه 24 فروردین 1389, 13:14 عصر
در ضمن برای حل شدن مشکل دوم نوع ستون ها رو به

TIME(0)
تغییر بده

raha1815
سه شنبه 24 فروردین 1389, 15:43 عصر
آقای شهرام بسیار ممنونم .
عذر میخوام باید از اول میگفتم بانکم sql

کاملا متوجه شدم query رو ولی مشکلم نمیدونم چیه
query های من اینجوریه :


cmd = New SqlCommand("select sum (dataon) - sum (dataoff) from p5rpbank", con)
If con.State = ConnectionState.Closed Then con.Open()
myDA = New SqlDataAdapter(cmd)
myDataSet = New DataSet
myDA.Fill(myDataSet, "p5rpbank")
grdrpbank.DataSource = myDataSet.Tables("p5rpbank").DefaultView


ولی باز جواب نمیده !

2- این
Time(0)
کجا تعریف میشه ؟ تو sql که نداریم همچین تایپی

Shahram_Shobeiri
چهارشنبه 25 فروردین 1389, 07:09 صبح
یعنی چی جواب نمیده؟ خطا میده؟ برای اطمینان query تو خود sql server تست کن ببین جواب می گیری.

برای اون مورد دوم هم رجوع کن به آدرس زیر :
http://www.sqlteam.com/article/using-the-time-data-type-in-sql-server-2008

raha1815
پنج شنبه 26 فروردین 1389, 10:20 صبح
سلام
تو sql که اجرا میکنم این اررور و میده :

Operand data type datetime is invalid for sum operator.

type

time(0)

رو کجا باید تعریف کنم ؟

Shahram_Shobeiri
پنج شنبه 26 فروردین 1389, 12:33 عصر
دیتا تایپ TIME در sql 2008 وجود دارد. نوع داده ای است که زمان را بدون تاریخ ذخیره می کند. احتمالاً از ورژن های پایین تر استفاده می کنید.
راه حل نهایی از جانب من :
از query زیر استفاده کنید.


select
TotalElapsedTime_on =
dateadd(dd,datediff(dd,sum(datediff(dd,0,Table_tim e.on_time)),sum(datediff(dd,0,Table_time.off_time) )),
dateadd(hh,(sum(datepart(hh,Table_time.on_time)) - sum(datepart(hh,Table_time.off_time))) ,
dateadd(mi,(sum(datepart(mi,Table_time.on_time)) - sum(datepart(mi,Table_time.off_time))),
dateadd(ss,(sum(datepart(ss,Table_time.on_time)) - sum(datepart(ss,Table_time.off_time))),
dateadd(ms,(sum(datepart(ms,Table_time.on_time)) - sum(datepart(ms,Table_time.off_time))),0)))))
from
Table_time

raha1815
جمعه 27 فروردین 1389, 21:08 عصر
سلام آقای شهرام عزیز ممنون از پاسختون
من از sql2008 استفاده میکنم ولی time type رو نمیبینم ، datatime , smalldatetime , timestamp رو فقط داره ...

Shahram_Shobeiri
شنبه 28 فروردین 1389, 07:24 صبح
خواهش می کنم :لبخندساده:
در تصویر زیر می بینید که داره! در ضمن با کوئری پست قبلی دیگه نیازی به استفاده از تایپ time نیست و شما می تونید از همون تایپ datetime استفاده کنید.