Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get the selected row in Gridview in Javascript or JQuery

Let me elaborate ... below is my partial gridview with a button field ... what I want is the text value of the button to use in building a url:

<asp:GridView CssClass="gridUser" ID="UsersGrid" ClientIDMode="Static" runat="server" AllowPaging="true" AllowSorting="true" PageSize="5" OnPageIndexChanging="PageIndexChange" OnRowCommand="Paging" OnSorting="SortPage" OnRowCreated="RowCreated"
                AutoGenerateColumns="false">

                <PagerSettings Mode="NextPreviousFirstLast" FirstPageImageUrl="~/Images/Navigation/firstpageIcon.png" LastPageImageUrl="~/Images/Navigation/lastpageIcon.png"
                    NextPageImageUrl="~/Images/Navigation/forwardOneIcon.png" PreviousPageImageUrl="~/Images/Navigation/backOneIcon.png" Position="Bottom" />

                <Columns>
                    <asp:TemplateField HeaderText="User Name" HeaderStyle-CssClass="gridHeader">
                        <ItemTemplate>
                           <asp:Button ID="UserLink" ClientIDMode="Static" runat="server" Text='<%#Eval("UserName") %>' CssClass="linkButton" OnClientClick = "return GetSelectedRow(this)"></asp:Button>
                    </ItemTemplate>
                        </asp:TemplateField>

and here is my javascript :

 $(".linkButton").click(function () {
        var ul = document.getElementById('UserLink');
        var row = ul.parentNode.parentNode;
        var rowIndex = row.rowIndex - 1;
        var Userid = row.cells[0].childNodes[1].value;
        var User = Userid;
        alert("Row is : " + row + "RowIndex is : " + rowIndex + "User ID is " + User);
    });

My issue is that my row returned is the first row ... not the selected row ... how do I get the selected row? Thank you for any assistance.

like image 965
Paul T. Rykiel Avatar asked Jun 01 '15 17:06

Paul T. Rykiel


People also ask

How to get GridView column value in jQuery?

In case if grid view is in content placeholder then inspect your Grid view in browser and copy Id of grid view (i.e. Id of your content placeholder + "_" + Id of Grid view ex: ContentPlaceholder1_GridView1) and use that combined ID in JQuery. Then get Rows from grid Then get Columns for each row.


2 Answers

Try this... Change naming conventions according to your requirement

<script type = "text/javascript">
        function GetSelectedRow(UserLink) {
            var row = UserLink.parentNode.parentNode;
            var rowIndex = row.rowIndex - 1;
            var Userid = row.cells[0].innerHTML;
            alert("RowIndex: " + rowIndex + " Userid : " + Userid + ");
            return false;
        }
    </script>
like image 151
Vikram Avatar answered Nov 14 '22 23:11

Vikram


Your first problem is that in your button template column you are using an Id=UserLink which will get repeated for each row. Your element id's should be unique. See this answer for more details.

Your second problem is that document.getElementById('UserLink'); will actually find the first element with the id of UserLink which is always going to be the first row. In your case you can us var ul = this; and that should give you the button that was actually clicked.

To summarize:

  • I would suggest getting ride of the id on your button or make them unique.
  • Change document.getElementById('UserLink') to this and that will get you the button that was clicked.
like image 27
Jared Avatar answered Nov 14 '22 22:11

Jared