Получить rowIndex для Gridview ASP.Net с помощью jQuery - PullRequest
5 голосов
/ 29 сентября 2010

Здравствуйте, возможно ли получить текущий индекс строки вида сетки, используя jQuery?

Бит фона:

Я удаляю строки из сетки, используя кнопку ссылки на стороне сервера в поле шаблона, например:

<asp:LinkButton CausesValidation="false" CommandName="Delete" ID="lnkDelete"
              OnClientClick="javascript: return(confirm('Delete item?'));" runat="server" Text="Delete" />

Что побуждает пользователя подтвердить или отменить удаление. Если пользователь нажимает кнопку «ОК», он вызывает этот метод для кода:

protected void GridViewRowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            this.gridview_uploads.EditIndex = -1;

            if (!this.UploadsList.Count.Equals(0))
            {
                DocumentUpload upload = this.UploadsList[e.RowIndex];
                if (upload != null)
                {
                    this.UploadsList.RemoveAt(e.RowIndex);
                    this.BindInputGridview();
                }
            }
        }

Но подтверждение JavaScript (Удалить элемент?) Выглядит немного невнятным.

Я бы предпочел использовать что-то вроде диалога JQuery, но если я это сделаю, я понятия не имею, как получить rowindex, используя этот подход (я могу выяснить, как вызвать код сервера).

Есть идеи?

Извините, если об этом уже спрашивали - я сделал трал SO и гуглил его, но не смог найти ничего полезного.

Ответы [ 3 ]

3 голосов
/ 29 сентября 2010

Я понял, как это сделать, используя метод __doPostBack (в Javascript)

>>> В aspx:

Скрытое поле:

<asp:HiddenField ID="hidden_gridRowIndex" runat="server" />

В теге сценария:

    $(document).ready
    (
    function () {
      $("#div_dialog_confirmUploadDelete").dialog({
        autoOpen: false
        , title: "Delete upload"
        , buttons: {
            "OK": function () {
                            __doPostBack('GridViewRowDelete', $("#<%# hidden_gridRowIndex.ClientID %>").val());
                            $(this).dialog('close');
                        }
             , "Cancel": function () { $(this).dialog('close'); }
                    }
                    });

});


    function deleteConfirm(index) {
                        $("#<%# hidden_gridRowIndex.ClientID %>").val(index)
                        $("#div_dialog_confirmUploadDelete").dialog('open');
                    }

В виде таблицы:

<asp:TemplateField>
  <ItemTemplate>
    <a href="javascript: void(0);" onclick='javascript:return deleteConfirm(<%# Container.DataItemIndex %>);'>Delete</a>
  </ItemTemplate>
</asp:TemplateField>

>>> В коде позади

На Page_Load:

if (Request["__EVENTTARGET"] != null)
            {
                switch (Request["__EVENTTARGET"])
                {
                    case "GridViewRowDelete":
                        if (Request["__EVENTARGUMENT"] != null)
                        {
                            int index = -1;
                            if (int.TryParse(Request["__EVENTARGUMENT"], out index))
                            {
                                this.GridViewRowDelete(index);
                            }
                        }
                        break;
                }
            }

Новый метод, вызываемый загрузкой страницы:

protected void GridViewRowDelete(int rowIndex)
        {
            this.gridview_uploads.EditIndex = -1;

            if (!this.UploadsList.Count.Equals(0))
            {
                DocumentUpload upload = this.UploadsList[rowIndex];
                if (upload != null)
                {
                    this.UploadsList.RemoveAt(rowIndex);
                    this.BindInputGridview();
                }
            }
        }

Подумав об этом, я мог бы, вероятно, сделать asp: HiddenField обычным скрытым элементом управления вводом html, поскольку серверная сторона никогда не должна его видеть.

Это кажется немного странным, поэтому не стесняйтесь бросать в меня камни/ предложить улучшения.

3 голосов
/ 29 сентября 2010

Если LinkButton является единственным LinkButton / Anchor в GridView, то вы должны иметь возможность сделать что-то вроде

$('#GridView1 a').click(function(){
     return confirm("Delete Item");
});

edit: изменить # GridView1 на .net ID элемента управления.

1007 * В.Б *

<%=(me.GridView1.ClientID)%>

с #

<%=(this.GridView1.ClientID)%>

Ответ Адрианосу

Если вы загляните в jQuery UI Dialog , у него будет хорошее окно модального подтверждения.

Аналогично приведенному выше коду, но вместо функции подтверждения вы можете получить:

<script type="text/javascript">
 $().ready(function(){
    $( "#dialog" ).dialog( "destroy" );
    $( "#dialog-confirm" ).dialog({
        resizable: false,
        height:140,
        modal: true,
                    autoOpen: false;
        buttons: {
            "Delete item": function() {
                $( this ).dialog( "close" );
                // Put in your return true/false here to activate button
            },
            Cancel: function() {
                $( this ).dialog( "close" );
            }
        }
    });
    $('#GridView1 a').click(function(){
        $('#dialog-confirm').dialog("open");
        return false;
    });

    )};
</script>
2 голосов
/ 11 июля 2011
  1. Добавление настраиваемого атрибута в сетку и установка значения для события привязки

       <asp:GridView ID="GridView1" runat="server">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>                
                        <a href="#" test='<%# Container.DataItemIndex %>'>content</a>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    
  2. Использование .net clientId для получения значения настраиваемого атрибута.

     $(document).ready(function () {
     $('#<%=(this.GridView1.ClientID)%> a').click(function () {
        return alert("Last Name : " + this.getAttribute("test") );
      })
      }
         );
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...