PDA

View Full Version : پیداکردن شماره سطر دیتاگرید برای حذف



iekrang
سه شنبه 29 آذر 1384, 10:57 صبح
ببخشید از اینکه به نظر شما سوالم تکراریه.
من برای حذف یک سطر از دیتاگرید احتیاج به شماره آن سطر دارم که برای پیدا کردن آن کد زیر را نوشتم:


string UserKey = dg.DataKeys[e.Item.ItemIndex].ToString();

اما این پیغام رو میده :
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
در ضمن من datakeyfield رو هم set کردم ولی باز...
راه دیگه اینکه از این دستور استفاده کنم ولی این روش هم جواب نمیده(با یه شرایط خاص جواب میده)


DataBoundLiteralControl DBLC = (DataBoundLiteralControl) e.Item.FindControl("ID").Controls[0];


حالا میخواهم یه بنده خدایی لطف کنه و برای من راه اصولیش رو توضیح بده که قدم به قدم چیکار باید بکنم.شاید من نکته ای رو اشتباه کردم.
ممنون

sh_mohsen taki
سه شنبه 29 آذر 1384, 11:38 صبح
Private Sub DataGrid1_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles DataGrid1.DeleteCommand
fill("table")
com.CommandText = "delete from table where code='" + Session("code") + "' and post='" + e.Item.Cells(17).Text + "'"
com.Connection = cn
cn.Open()
com.ExecuteNonQuery()
cn.Close()
fillall("table")
bind(DataGrid1, "table")
End Sub

or

Private Sub dguser_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles dguser.DeleteCommand
Dim a As String = e.Item.Cells(2).Text
SqlDataAdapter1.Fill(DataSet11, "table")
Try
DataSet11.userpass.FindByusername(a).Delete()
SqlDataAdapter1.Update(DataSet11)
Catch
End Try
dguser.DataBind()
End Sub

or

Private Sub dgpub_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles dgpub.DeleteCommand
SqlDataAdapter1.Fill(DataSet11, "table")
DataSet11.tab.Rows(e.Item.ItemIndex).Delete()
SqlDataAdapter1.Update(DataSet11)
dgpub.DataBind()
End Sub
وای سلام یادم رفت
با سلام
راه اول برای کار با دیتا ست دست ساز و Session
راه دوم استفاده از عناصر گرافیکال
که در این راه به علت اینکه ممکن است با به روز رسانی عمدی صفحه با عث حذف سطری دیگر از صفحه شویم از find استفاده کردیم و چون با پاک کردن سطر و رفرش مجدد امکان خطا زیاد است از Try استفاده شده است
راه سوم استفاده از عناصر گرافیکال با این مشکل که با به روز رسانی مجدد و عمدی نه Postback سطر بعدی نیز حذف خواهد شد
هر کدوم به دردت میخوره استفاده کن

iekrang
سه شنبه 29 آذر 1384, 11:47 صبح
فکر میکنم شما دقیقاً متوجه سوال بنده نشدید پس دوباره خدمتتون عرض میکنم که من فقط توی اون شماره سطر مشکل دارم.یعنی
????=delete .... where id
+ لطفاً کد هاتون رو داخل تگ [/code][code]بنویسید تا بهم نریزه و ما بیشتر استفاده کنیم.

sh_mohsen taki
سه شنبه 29 آذر 1384, 21:58 عصر
با سلام
من سه روش حذف آوردم
ببین کجاش بدردت میخوره استفاده کن دیگه
آخه حذف بدون بدست آوردن سطر که نمیشه ؟

iekrang
چهارشنبه 30 آذر 1384, 10:16 صبح
امیدوارم اگر کس دیگه ای دقیقاً متوجه منظور من شده به سوالم جواب بده.

white fox
پنج شنبه 01 دی 1384, 03:48 صبح
دوست عزیز من خودم هنگام کار با دیتاگرید برای پاک کردن یا آپدیت کردن هیچوقت شماره سطر رو برنمیگردونم میدونی چرا؟
چون با فیلتر کردن گریدت یا به صفحه بعدی دیتاگریدت میری شماره سری که برمیگردونه شماره سطر اون سطری نیست که تو دیتابیست هست
بهتره که یه DatakeyFiled در دیتا گریدت تعیین کنی و اونو برگردونی و با اون در دستور DELETET یه WHERE تعیین کنی و با اون سطر مورد نظرتو پیدا کنی

مثل زیر که من در یکی از برنامه هام عمل کردم



Dim RowsSelected As String
Dim dgi As DataGridItem

RowsSelected = DataGrid1.DataKeys(dgi.ItemIndex).ToString()
cmd.CommandText = "DELETE FROM Names WHERE FullName = '" & RowsSelected & "'"
cmd.ExecuteNonQuery()



یا اینکه یه سلول دیگه از اون سر رو برگردونی و باز در شرط دستور DELETE استفاده کنی..
من خودم تا بحال مشکلی نداشتم با این روشها

nokhod
جمعه 02 دی 1384, 20:12 عصر
برای دسترسی به ID جدول بانک که کلید باشد در تابع Delete از کد زیر استفاده نمایید:
<
ID=e.CommandArgument.ToString()
توجه داشته باشید که در کد HTML آبجکتی که تابع شما را (مثلا برای حذف) فراخوانی میکند کد زیر را نوشته باشید :

OnCommand="Delete"
که نام تابع حذف را مشخص میکند و بعد از یک فاصله کد زیر را نوشته باشید:

CommandArgument='<%#DataBinder.Eval(Container.DataItem,"ID") %>'
که ID را بعنوان پارامتر میفرستد.
موفق باشید.