PDA

View Full Version : سوال: بازهم کار کشته ها لطفاً : ObjectDataSource & GridView



salehbagheri
سه شنبه 26 شهریور 1387, 14:54 عصر
سلام

اگه یه GridView از یه ObjectDataSource استفاده کنه و اون ObjectDataSource هم خودش به یه Class وصل باشه، حالا اگه روی Grid توی هر سطر اون یه ImageButton گذاشته باشیم که بخواهیم وقتی کاربر روی اون Image کلیک کرد مثلا یه سطر به جدولمون حذف بشه،
اون Imagebutton چطوری به متد Delete از کلاسمون متصل میشه؟

البته بانکی وجود نداره، و اطلاعات در Cache ذخیره شده اند.
امیدوارم که درست منظورمو منتقل کرده باشم......

Amir Taghavi
سه شنبه 26 شهریور 1387, 15:26 عصر
btnDelete.CommandName = "Delete";

odiseh
چهارشنبه 27 شهریور 1387, 10:01 صبح
سلام آقای تقوی
برای ثبت رکورد اضافه شده چی؟ اگه یه ImageButton داشته باشیم و بقیه ماجرا مثل توضیحات آقای باقری

Amir Taghavi
چهارشنبه 27 شهریور 1387, 11:32 صبح
برای ثبت رکورد اضافه شده چی

متوجه نمی شم! یا رکورد در همون لحظه ثبت می شه یا update میشه. در هر صورت برای ثبت بجای Delete بنویس Update ولی برای ثبت رکورد جدید داستان کمی فرق می کنه. که این تاپیک رو مطالعه کنید:
http://barnamenevis.org/forum/showthread.php?t=50594

salehbagheri
چهارشنبه 27 شهریور 1387, 11:46 صبح
btnDelete.CommandName = "Delete";

از اول هم این Error رو نمایش می داد هنوز هم همونه!



ObjectDataSource Cannot Find a non-generic method of DeleteProduct with parameter: ProductID


این هم کد Delete


Public Shared Sub DeleteProduct(ByVal ProductID As Integer)
If ItemsInCache.Count > 0 Then
ItemsInCache.RemoveAt(ProductID)
End If
End Sub

Amir Taghavi
چهارشنبه 27 شهریور 1387, 12:39 عصر
DeleteMethod رو در ObjectDataSource با Method مربوطه ست کن.
Parameter رو هم همینطور.
CausesValidation دکمه Delete رو هم false کن.

چیز خاص دیگه ای نداره.

odiseh
چهارشنبه 27 شهریور 1387, 15:03 عصر
آقای تقوی
با تشکر از جنابعالی بابت پیگیری و راهنمایی های خوبتان
من که مشکلم تا اینجا حل شده ولی یه مورد دیگه !!
Update و Delete دو بار اجرا میشن...!!! کجای کار ایراد داره به نظر شما؟؟

Amir Taghavi
چهارشنبه 27 شهریور 1387, 15:49 عصر
Update و Delete دو بار اجرا میشن...!!!

من که جادوگر نیستم بدونم چکار کردی! (: بگو ببینم چی نوشتی؟

odiseh
چهارشنبه 27 شهریور 1387, 16:03 عصر
وای چه خشن !!
برای Update::
الف - در متد gridView_RowEditing : شماره سطری که edit میشه رو در یه متغیر از نوع ViewState نگه داری کردم.
ب - در متد ObjectDataSource_Updating : پارامترهای ورودی تابع Update از کلاسم رو مقداردهی کردم.
اما وقیتی که کار Update برای اولین بار درست انجام میشه باز برنامه میره سراغ بخش ب و ادامه قصه!

Amir Taghavi
چهارشنبه 27 شهریور 1387, 16:18 عصر
وای چه خشن !!کجاش خشن بود! مگه (: رو ندیدی!

منظورم کد بود نه تئوری. حتما" یه جایی اشتباه کردی.

البته شاید بشه حدس زد که چی نوشتی:


if(ViewState["p"] != null)
{
...
}اگه حدسم درست باشه باید بعد از Update اونو null کنی.تو page_load چی نوشتی؟

odiseh
چهارشنبه 27 شهریور 1387, 16:37 عصر
هیچی به جز دوباره خوانی متغیر دیگه ای که اونم از نوع ViewState هست.

odiseh
چهارشنبه 27 شهریور 1387, 16:38 عصر
Protected Sub grdEmployeeInterest_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs ) Handles grdEmployeeInterest.RowCommand
Select Case e.CommandName.ToUpper
Case "SAVE"
odsEmployeeInterest.Insert()
Case "UPDATE"
odsEmployeeInterest.Update()
Case "DELETE"
odsEmployeeInterest.Delete()
End Select
End Sub




Protected Sub odsEmployeeInterest_Updating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceMethodEv entArgs) Handles odsEmployeeInterest.Updating
e.InputParameters("lID") = CType(grdEmployeeInterest.DataKeys.Item(ViewState("RowEditingIndex")).Value, Int32)
e.InputParameters("lInterestID") = CType((grdEmployeeInterest.Rows(ViewState("RowEditingIndex")).FindControl("drpInterestEditItem")), DropDownList).SelectedValue
e.InputParameters("sDescription") = CType((grdEmployeeInterest.Rows(ViewState("RowEditingIndex")).FindControl("txtInterestDescription")), TextBox).Text.Trim
End Sub




Protected Sub grdEmployeeInterest_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles grdEmployeeInterest.RowEditing
ViewState("RowEditingIndex") = e.NewEditIndex
ViewState("RowEditingInterestDropDownListValue") = Convert.ToInt16(CType(grdEmployeeInterest.Rows(Vie wState("RowEditingIndex")).FindControl("lblInterestID"), Label).Text)
End Sub

Amir Taghavi
چهارشنبه 27 شهریور 1387, 17:00 عصر
فکر نمی کنم دیگه لازم باشه که در رویداد RowCommand اینارو بنویسی:


Case"UPDATE"
odsEmployeeInterest.Update()
Case"DELETE"
odsEmployeeInterest.Delete()