على التوالي مؤشر من ImageButton انقر في GridView
-
19-08-2019 - |
سؤال
لدي Gridview مع ImageButtons إضافة إلى عمود طريق templatefield.لقد تعلق وظيفة إلى "OnClick" الحدث.
مرة واحدة في هذه الوظيفة, كيف يمكن الحصول على المؤشر من الصف الذي يحتوي على زر التي تم النقر عليها.يبدو أن كل ما لدي هو إحداثيات الماوس على الصفحة.
المحلول
بدلا من حلقات خلال الصفوف يمكنك استخدام هذا
<asp:ImageButton runat="server" id="ibtn1" ... RowIndex='<%# Container.DisplayIndex %>'
OnClick="button_click"/>
...
protected void button_click(object sender, EventArgs e){
ImageButton ibtn1 = sender as ImageButton;
int rowIndex = Convert.ToInt32(ibtn1.Attributes["RowIndex"]);
//Use this rowIndex in your code
}
نصائح أخرى
يلقي المرسل إلى ImageButton ثم يلقي صورة الزر NamingContainer إلى صف:
VB:
Dim btn as ImageButton = CType(sender, ImageButton)
Dim row as GridViewRow = CType(btn.NamingContainer, GridViewRow)
C#:
ImageButton btn = (ImageButton)sender;
GridViewRow row = (GridViewRow)btn.NamingContainer;
أتفق مع bdukes أن الخيار الأسهل هو استخدام CommandArgument.ربط البيانات الخاصة بك هو رقم معرف فريد في تلك الممتلكات ، ثم التعامل مع _RowCommand الحدث.
على سبيل المثال:
<asp:TemplateField >
<HeaderStyle Width="20" />
<ItemTemplate>
<asp:ImageButton ImageUrl="images/icons/iCal.png" CommandArgument='<%# Eval("Event_ID") %>' ToolTip="iCal" runat="server" Height="18" Width="18" />
</ItemTemplate>
</asp:TemplateField>
Protected Sub gv_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gv.RowCommand
e.CommandArgument 'use this value in whatever way you like
End Sub
هذا هو جيد جدا خدعة.لدي حيلة أخرى أيضا.يمكنك أن تجرب ذلك...
protected void userGridview_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
GridViewRow rowSelect = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
int rowindex = rowSelect.RowIndex;
}
}
إنها أيضا طريقة جيدة.
لا تنتمي إلى StackOverflow