Reputation: 6066
I have a GridView
with CheckBox
in first column and Button
on SecondLast column. When user Clicks on Button
the CheckBox
of current row
must be Invisible
using Javascript
.
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="true"
PageSize="100" AllowSorting="true" DataSourceID="sqlUsers" DataKeyNames="ttppcid"
Width="100%" OnRowCommand="GridView1_RowCommand" EmptyDataText="No Data Found"
OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField ItemStyle-Width="30px" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center" Visible="true">
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" Height="30" class="mychk" rowid="<%# Container.DataItemIndex+1 %>" />
</ItemTemplate>
</asp:TemplateField>
//some more templates here
<asp:TemplateField HeaderText="" ItemStyle-Width="70px" ItemStyle-HorizontalAlign="Center"
HeaderStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Button ID="BtnSource" runat="server" Text="Source" rowid="<%# Container.DataItemIndex+1 %>"
class="showButton" OnClick='<%# "return SetRowValues("+Eval("ttppcid")+",this.id,"+Eval("Fair")+","+Eval("Good")+","+Eval("Mint")+","+Eval("Poor")+","+Eval("Fair")+")"%>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Javascript:
function SetRowValues(id, controlid, fair, good, mint, nnew, poor, broken) {
var rowid = $("#" + controlid).attr("rowid");
var chkBoxID;
var chkRowid;
$('.mychk').css("display", "block");
$('.mychk').each(function() {
chkBoxID = this.id;
alert(chkBoxID);
chkRowid = $("#" + chkBoxID).attr("rowid");
alert(chkBoxID + " ROW :" + chkRowid);
if (chkRowid == rowid) {
$("#" + chkBoxID).css("display", "none");
}
else {
$("#" + chkBoxID).css("display", "block");
}
});
return false;
}
All works fine just here in alert
i get empty. NOT able to get the ID of the CheckBox
Control
Also Tried With:
<script type="text/javascript">
$(document).ready(function() {
$(function() {
$(".showButton").on("click", function() {
alert(".showButton clicked");
$(this).closest("tr").find(":checkbox").hide();
});
});
});
</script>
Rendered CheckBox:
<td align="center" style="width: 30px; display: block;">
<span class="mychk" rowid="1" style="display: block; height: 30px;"><input id="ctl00_ContentPlaceHolder1_GridView1_ctl02_chkSelect" type="checkbox" name="ctl00$ContentPlaceHolder1$GridView1$ctl02$chkSelect"></span>
</td>
Rendered Button in Grid:
<td align="center" style="width: 70px; display: block;">
<input type="submit" name="ctl00$ContentPlaceHolder1$GridView1$ctl03$BtnSource" value="Source" onclick="return SetRowValues(6,this.id,222.0000,222.0000,222.0000,222.0000,222.0000);WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$GridView1$ctl03$BtnSource", "", true, "", "", false, false))" id="ctl00_ContentPlaceHolder1_GridView1_ctl03_BtnSource" class="showButton" rowid="1" style="">
</td>
Any Idea?
Help Appreciated!
Upvotes: 1
Views: 1994
Reputation: 6066
Here is my Complete Solution:
function SetRowValues(id, controlid, fair, good, mint, nnew, poor, broken) {
var rowid = $("#" + controlid).attr("rowid");
var chkBoxID;
var chkRowid;
$('span.mychk').each(function() {
chkBoxID = $(this).attr('id');
chkRowid = $(this).attr('rowid');
if (chkRowid == rowid) {
$(this).hide();
$(this).closest("td").css("border","none");
}
else {
$(this).show();
$(this).closest("td").css("border", "1px solid grey");
}
});
return false;
}
Thanks to all..! :)
Upvotes: 2
Reputation: 4207
First to do this without postback, change the asp-button to, input type=button or a html-button:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="true"
PageSize="100" AllowSorting="true" DataSourceID="sqlUsers" DataKeyNames="ttppcid"
Width="100%" OnRowCommand="GridView1_RowCommand" EmptyDataText="No Data Found"
OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField ItemStyle-Width="30px" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center" Visible="true">
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" Height="30" class="mychk" rowid="<%# Container.DataItemIndex+1 %>" />
</ItemTemplate>
</asp:TemplateField>
//some more templates here
<asp:TemplateField HeaderText="" ItemStyle-Width="70px" ItemStyle-HorizontalAlign="Center"
HeaderStyle-HorizontalAlign="Center">
<ItemTemplate>
<input type="button" class="showButton" value="Source"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
and then use a script like this to hide the checkbox. You don't need the id of the checkbox for this, simply find the parent row and hide the checkbox:
$(function() {
$(".showButton").on("click", function() {
$(this).closest("tr").find(":checkbox").hide();
});
});
Upvotes: 0
Reputation: 8636
Try with below:
var result = $('#<%=GridView1.ClientID %> tr td input[id*="chkSelect"][type=checkbox]:checked').map(function () {
return $(this).closest('tr').find('td').eq(2).text();
}).get().join();
Upvotes: 0