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.
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.
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>
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:
document.getElementById('UserLink')
to this
and that will get you the button that was clicked.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With