PDA

View Full Version : نوشتن رویداد برای تمپلیت فیلدهای گرید



A.Yousefi
جمعه 21 بهمن 1390, 14:45 عصر
سلام
من میخوام وقتی کاربر رو یکی از باتنهایی که تو تمپلیت گرید ویوم قرار دادم کلیک کرد،یه کدی اجرا شه و سطرهای انتخاب شده حذف شه،کدی که نوشتم مشکلی نداره و اینکار رو انجام میده و همون لحظه تغییرات تو گرید نمایش داده میشه،اما زمانی که باتن رو میندازم تو تمپلیت گرید اون کردم کار نمیکنه،البته عمل حذف رو انجام میده ولی بعدش ارور میده.
من خصوصیت CommanName اون باتنی که تو تمپلیت قرار دادم رو مقدار دهی کردم و بعد تو رویداد RowCommand گریدم کدام رو قرار دادم:

<








asp:TemplateField>





<ItemTemplate>





















<asp:ButtonID="btnDel"runat="server"Text="Delete"CommandName="Delete"/>

</ItemTemplate>


</asp:TemplateField>

اینم کد سی شارپم:





protectedvoid GridView1_RowCommand(object sender, GridViewCommandEventArgs e)

{





if (e.CommandName == "Delete")

{





foreach (GridViewRow row in GridView1.Rows)

{





CheckBox checkbox = (CheckBox)row.FindControl("CheckBox1");





if (checkbox.Checked)

{




SqlDataSource1.DeleteParameters[



"ID"].DefaultValue = X;

SqlDataSource1.Delete();

}

}

}

}



بعد از اینکه رکوردها رو حذف میکنه ارور میده:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

A.Yousefi
شنبه 22 بهمن 1390, 01:26 صبح
فک کنم متوجه منظورم نشدین،مشکلی که دارمو تو این پروژه ضمیمه کردم،ممنون میشم یه نگا بهش بندازین زیاد وقتتونو نمیگیره،کارم گیره اینه.
تو این پیج یه گرید انداختم بعد وصلش کردم به یه تیبل
تو فوتر اون گرید یه دکمه انداختم و یه ستون هم چک باکسه
میخوام وقتی کاربر سطرهای مورد نظرش رو بوسیله چک باکسها انتخاب کرد با کلیک روی اون دکمه ی توی فوتر سطرهای انتخابی حذف شن.
کدی که نوشتم کار میکنه و همه سطرهای انتخابی کاربر رو حذف میکنه اما بعدش یه ارور میده و دیگه گریدو نمایش نمیده که من نمیدونم اروره چیه.:عصبانی++:
خواهش میکنم یه نگا بندازین.

Himalaya
شنبه 22 بهمن 1390, 02:11 صبح
سلام
مقدار CommandName رو تغییر بده. مثلا بزار DeleteRow

A.Yousefi
شنبه 22 بهمن 1390, 11:28 صبح
سلام
مقدار CommandName رو تغییر بده. مثلا بزار DeleteRow
به به سلاملکم آقای کم پیدا
باور کنید همین یه نصفه خطی که نوشتی کلی خوشحالم کرد،یه روز بود داشتم باهاش سر و کله میزدم.
حالا از کجا فهمیدی؟
یعنی CommandName رو نمیشه Delete گذاشت؟

Himalaya
یک شنبه 23 بهمن 1390, 14:10 عصر
سلام

یعنی CommandName رو نمیشه Delete گذاشت؟
چرا نمیشه. CommandName های Delete, Insert, Edit , Update , Cancel, New برای گرید تعریف شدس. یعنی مثلا اگه شما یه ستون از نوع Button داشته باشی که CommandName اون رو یا Delete
ست کرده باشی، خود گرید تشخیص میده که موقع زدن اون دکمه باید دستور DeleteCommand رو برای سطر جاری اجرا کنه (با توجه به کلید). یعنی احتیاج به نوشتن کد نیست. حالا اکه میخوای کد بنویسی براش، پس نباید CommandName اون رو Delete بزاری.
حالا چرا کد شما سطرها رو از db پاک میکنه و بلافاصله ارور میده؟
سطرها از db پاک میشن چون کدی که شما نوشتید داره درست کار میکنه و سطرها پاک میشن. بلافاصله خود گرید هم دست به کار میشه تا عملیات مربوط به CommandName=Delete رو انجام بده. اون ارور واسه اینه که چون خود گرید میخواد سطر جاری رو حذف کنه (سطری که دکمه داخل اون کلیک شده) و چون دکمه شما تو Footer هستش و Footer هم از نوع DataRow نیست، پیغام میده که ایندکس سطری که میخواید حذف کنید خارج از محدودس.