PDA

View Full Version : سوال: مشکل با رویدادDataGridView2_CellValueChanged



mina.net
سه شنبه 04 فروردین 1388, 20:23 عصر
سلام دوستان ، سال نو مبارک
من در رویدادDataGridView2_CellValueChanged کد زیر رو نوشتم



If e.RowIndex < 0 Then Exit Sub
If e.ColumnIndex = 0 Or e.ColumnIndex = 1 Or e.ColumnIndex = 2 Or e.ColumnIndex = 6 Or e.ColumnIndex = 3 Then Exit Sub


Dim str4 As Double


Dim I As Integer = e.RowIndex


Dim str2 As Double
Dim str5 As Double
Dim str1 As Double


Try
str1 = DataGridView2.Rows(I).Cells(4).Value
Catch ex As Exception
str1 = 0
End Try


Try
str2 = DataGridView2.Rows(I).Cells(5).Value
Catch ex As Exception
str2 = 0
End Try


Try
str5 = DataGridView2.Rows(I).Cells(6).Value
Catch ex As Exception
str5 = 0
End Try


Dim str3 As Double = (str1 * str2) - str5


DataGridView2.Rows(e.RowIndex).Cells(7).Value = 0
DataGridView2.Rows(e.RowIndex).Cells(7).Value = str3



For I = 0 To (DataGridView2.RowCount - 2)
str3 = DataGridView2.Rows(I).Cells(7).Value
str4 += str3
Next
bol6 = True


TextBox6.Text = str4



وقتی به کد زیر میرسه




DataGridView2.Rows(e.RowIndex).Cells(7).Value = str3



خطا میده


An unhandled exception of type 'System.StackOverflowException' occurred in anbar.exe

دوستان برای رفع این مشکل باید چیکار کنم.

anooshiran
سه شنبه 04 فروردین 1388, 20:45 عصر
سلام دوست عزيز

اين error حادث شده احتمالا از عدم تطابق type سلول مربوطه با str3 ميباشد. من نمي دانم type ستون7 ديتاگريد را چه در نظر گرفته ايد. مثلا اگر استرينگ است مي توانيد با كد زيز حل كنيد




DataGridView2.Rows(e.RowIndex).Cells(7).Value = CType(str3, String)



يا اگر integer است به جاي string در كد فوق از integer استفاده كنيد.

mina.net
سه شنبه 04 فروردین 1388, 21:29 عصر
سلام دوست عزيز

اين error حادث شده احتمالا از عدم تطابق type سلول مربوطه با str3 ميباشد. من نمي دانم type ستون7 ديتاگريد را چه در نظر گرفته ايد. مثلا اگر استرينگ است مي توانيد با كد زيز حل كنيد




DataGridView2.Rows(e.RowIndex).Cells(7).Value = CType(str3, String)



يا اگر integer است به جاي string در كد فوق از integer استفاده كنيد.

سلام جناب anooshiran سال نو مبارک
من این کاری که شما گفتید رو انجام دادم. شاید لازم بود بیشتر توضیح می دادم. من به دیتا گرید یک ستون از نوع button اضافه کردم و نام اون رو del یا همون حذف گذاشتم. همه ستون ها به یک بانک متصل هستند فقط این یک ستون که از نوع button هست به بانک متصل نیست ، این ستون رو گذاشتم اگه کاربر می خواد یک سطر از فاکتور رو حذف کنه روی اون کلیک کنه. البته این ستون 7 نیست. جالب اینه که اگه این ستون(button) به بانک متصل باشه یا اصلا حذفش کنم خطای نمی ده . در ضمن من در شماره اندیس ها هم اشتباه نکردم.
در ضمن من datetimepicker فارسی رو ساختم می خوام کارهای بیشتری روش انجام بدم البته اگه شما و بقیه دوستان کمک کنین. البته تعطیلات هست و خیلی ها مسافرتن نمی یان تو سایت.
ممنون از کمکی که انجام می دید.

anooshiran
چهارشنبه 05 فروردین 1388, 00:01 صبح
سلام دوست عزيز

با عرض تبريك سال نو اورمزدي خدمت شما و بقيه دوستان

اين error ناشي از اين است كه شما داراي يك الگوريتم بارگشتي recursive algoritm در برنامه هستيد و آن را به پايان نرسانده ايد. توجه كنيد كه در datagridview در بعضي از event ها شما دچار اين مشكل ميشويد . مثلا اگر در cellvalidated بخواهيد currentcell را تعويض كنيد خود را در يك recursive algoritm گرفتار كرده ايد و به اين مشكل خواهيد برخورد . اين error يعني، آنقدر عملي تكرار ميشود تا stackoverflow شود. متاسفانه من code شما را در اختيار ندارم ولي خود اگر دقيقا trace كنيد به نتيجه خواهيد رسيد.

در ضمن دوست عزيز پيشنهادي براي شما دارم . در قطعه كدي كه گذاشتيد ديدم كه از شماره ستون استفاده كرده ايد. براي اينكه كمتر دچار سردرگمي شويد يا احيانا اگر تغييراتي در جاي ستونها داديد برنامه دستخوش مشكل نسود بهتر است از نام ستون ها استفاده كنيد. مي بخشيد اين فقط يك سليقه است