سؤال

لدي 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

أسهل طريقة التي وجدتها هو استخدام الأمر الحدث على انقر الحدث وإرسال العنصر معرف الأمر حجة.

هل يمكن أيضا حلقة على الصفوف في GridView ومقارنة ImageButton في الصف sender الحجة في الخاص بك انقر فوق الحدث.

هذا هو جيد جدا خدعة.لدي حيلة أخرى أيضا.يمكنك أن تجرب ذلك...

 protected void userGridview_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        {
            GridViewRow rowSelect = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
            int rowindex = rowSelect.RowIndex;
         }
    }

إنها أيضا طريقة جيدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top