PDA

View Full Version : checkbox در gridview



karim orooji
دوشنبه 05 مرداد 1388, 11:37 صبح
با سلام

چرا در این کد checkbox مقدار true نمشود


Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer = 0
Dim lstTest As New List(Of ss)()
For Each grd As GridViewRow In GridView1.Rows
Dim objtest As New ss()
Dim objchk As CheckBox = DirectCast(GridView1.Rows(i).FindControl("CheckBox1"), CheckBox)
If objchk.Checked Then

objtest.Name = GridView1.Rows(i).Cells(1).Text
objtest.Unit = Convert.ToInt16(GridView1.Rows(i).Cells(2).Text)
lstTest.Add(objtest)
End If

i = i + 1
Next

End Sub

Al.Nop
دوشنبه 05 مرداد 1388, 12:24 عصر
سلام:لبخندساده:
مشکل اصلی از این خط برنامه شماست :

DirectCast(GridView1.Rows(i).FindControl("CheckBox1"), CheckBox)
شما وقتی که از Foreach برای پیمایش در ردیف های GridView استفاده می کنید دیگر لزومی به استفاده از اندیس ندارید .
پس خط بالا تبدیل به کد زیر میشه :


CType(grd.FindControl("CheckBox1"), CheckBox)

هر چند که تبدیل های فوق نیز می توانند انجام نگیرند .
واضح است که شمارنده ی کد شما نیز باید از بین برود .
نکته : البته کدهای فوق در حالتی است که Buttun خارج از گرید باشد و اگر داخل گرید باشد و نیاز به ID هر ردیف باشد نیاز به کد بیشتری داریم که اگر لازم باشد مطرح می کنم .
موفق باشید:چشمک:

karim orooji
دوشنبه 05 مرداد 1388, 14:15 عصر
دوست عزیز این کل برنامه ست

میخوام با زدن تیک در checkbox سطر انتخاب بشه و با زدن کلید save در بانک ذخیره بشه
ممنون میشم کمکم کنی

NetBeans
دوشنبه 05 مرداد 1388, 16:11 عصر
این مشکل ، مشکل منم هست
اگه یکی پیدا بشه این مشکل و حل کنه خیلی خوب می شه.

bachebahal_1363
دوشنبه 05 مرداد 1388, 16:28 عصر
این مورد را من در اینجا (http://www.barnamenevis.org/forum/showthread.php?t=169809) هم توضیح دادم اگر یه نگاه بندازین متوجه می شین
البته برای AJAX باید یه Page دومی هم وجود داشته باشه که لزوما Page هم لازم نیست با یک ashx مشکل حل می شه که آیتم های انتخاب شده یا به عبارتی identity های یا DataKey های انتحاب شده رو به صورت کوئری استرینگ به صفحه دوم بفرستین بعد با یک foreach ساده همه را از دیتا بیس حذف کنین

NetBeans
دوشنبه 05 مرداد 1388, 17:30 عصر
دوست عزیز bachebahal_1363
من هنوز از اون تاپیکی که اشاره کرین هنوز نتیجه ای نگرفتم !!!

Al.Nop
دوشنبه 05 مرداد 1388, 17:51 عصر
سلام:لبخندساده:
من فایل ها رو اصلاح کردم و برنامه زیر درست کار می کنه .
ولی جناب عروجی برنامه شما مشکلاتی رو در زمینه امنیت ( تزریق SQL ) و کارآیی(استفاده حساب نشده از LIST ها ) داشت به همین دلیل قسمتی از کد ها عوض شد . اگر کمی روی کدها تامل کنید اطمینان دارم که مشکلی نخواهد بود .
در مورد مشکل NetBeans (http://barnamenevis.org/forum/member.php?u=97233)(برای دسترسی به ID سطر انتخاب شده )
من گمان می کنم با یک مثال بهتر منظورم رو برسونم :
فرض کنید که شما ستونی از CheckBox ها در گرید دارید و یک Buttun و می خواهید که با انتخاب CheckBox ها سطر های انتخاب شده توسط کاربر رو از DataBase حذف کنید . کد زیر حلال این مسئله است :


Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

For Each Row As GridViewRow In GridView1.Rows
Dim cb As CheckBox = Row.FindControl("checkbox1")
If cb IsNot Nothing AndAlso cb.Checked Then
Dim id As Integer = Convert.ToInt32(GridView1.DataKeys(Row.RowIndex).V alue)
' کدی که برای حذف سطر با آی دی مورد نظر مورد نیاز است در این جا قرار میگیرد
Label1.Text &= String.Format("Row deleted by ID : {0}<br>", id)

End If
Next
End Sub


همانطور که در کد بالا دقت کردید من در خط زیر به id سطر انتخاب شده دسترسی پیدا کردم :


Dim id As Integer = Convert.ToInt32(GridView1.DataKeys(Row.RowIndex).V alue)

موفق باشید :چشمک:

Al.Nop
دوشنبه 05 مرداد 1388, 22:19 عصر
سلام:لبخندساده:
آقای عروجی من فعلا نمی توانم از پیغام های خصوصی استفاده کنم .
قانون سایت :

IF POSTHA < 20 Then respons.write(MAHROOM AZ PM!!) EndIF

باید بحث رو همین جا ادامه بدیم .
به هر حال با برنامه من به هر تعداد که ردیف انتخاب بشه همگی به بانک اضافه می شوند و محدودیتی نداره . ( البته اگه منظور شما رو کامل متوجه شده باشم )
موفق باشید:چشمک:

karim orooji
دوشنبه 05 مرداد 1388, 23:07 عصر
با سلام به دوست گرامي و ممنون كه زحمت ميكشد ما را راهنمايي ميكنيد :بوس:
يك برنامه داريم با دوستان مينويسم كه
براي انتخاب روز ها هفته براي شروع يك ترم جديد
كاربري كه براي كلاسي ثبت نام ميكنه ميتونه در هفته 3 روز رو براي كلاس خود انتخاب كنه
بچه اين طرح ميخوان پياده سازي كنند كه كاربر بر فرض مثال مياد (شنبه دوشنبه و چهارشنبه) رو براي
در هفته انتخاب به وسيله چك باكس در گريد ميكنه بره در بانك ذخيره بشه و بر مبناي اون بياد كارت مربوط كلاس براي او چاپ بشه


اميدوارم كه منظور رو رسونده باشم




با تشكر

Al.Nop
سه شنبه 06 مرداد 1388, 01:24 صبح
سلام .:لبخندساده:
من برنامه رو همانطور که گفتید تغییر دادم . البته باید گفت که این تنها راه حل مسئله نیست و ممکن چندین راه برای این برنامه رفت .
در این برنامه یک ستون اضافه کردم با یک کنترل CheckBoxList و 7 آیتم به عنوان روزهای هفته که مقدار های آن ها برابر روز های هفته است .
سپس کاربر فقط مجاز که 3 تا CheckBox رو انتخاب کنه بعد با پیمایش CheckBoxList مقدار های روز های هفته ی انتخاب شده به طور مستقیم به بانک اطلاعاتی وارد میشه .( البته میشد برای هر یک از روزهای هفته یک عدد در نظر گرفت ویک عدد 3 رقمی رو به عنوان سه روز به بانک اطلاعاتی اضافه کنیم و بعد ها هنگام خواندن داده ها این ارقام رو جدا کرده و به نام های خود درآوریم )
همین .
موفق باشید:چشمک:

karim orooji
سه شنبه 06 مرداد 1388, 15:27 عصر
با سلام به دوستان به خصوص جناب al.nop كه زحمت ميكشد راهنمايي ميكنند
اينم تصويري كه سوالش رو مطرح كردم

يه سوال ديگه هم داشتم يه چيز شبيه iframe كه دورش خط قرمز كشيدم نميدونم چيه


دوستان راهنمايي كنند