2014-01-30 50 views
1

我在第一列与CheckBox一个GridViewButton上SecondLast列。当用户点击Buttoncurrent rowCheckBox必须使用JavascriptInvisible如何从使用Javascript的GridView中隐藏所选行的复选框?

<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; 
} 

所有工作正常,只是在这里alert我得到空。没能拿到CheckBox控件的ID

也试图与:

<script type="text/javascript"> 
    $(document).ready(function() { 
    $(function() { 
     $(".showButton").on("click", function() { 
      alert(".showButton clicked"); 
      $(this).closest("tr").find(":checkbox").hide(); 
     }); 
    }); 
    }); 
</script> 

渲染复选框:

<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> 

渲染巴顿在排位:

<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(&quot;ctl00$ContentPlaceHolder1$GridView1$ctl03$BtnSource&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="ctl00_ContentPlaceHolder1_GridView1_ctl03_BtnSource" class="showButton" rowid="1" style=""> 
</td> 

任何想法?

帮助赞赏!

+0

你运行应用程序是什么最终的HTML之后?你能粘贴html输出吗? – Rahatur

+1

如果我正确地理解了你,你无法用javascript实现。这个asp按钮会回发,隐藏的复选框会再次显示。如果您不想进行回发,请使用html-button。 – Esko

+0

@Rahat PLZ检查编辑..! –

回答

2

这里是我的完整的解决方案:

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; 
} 

感谢所有..! :)

+0

很高兴你找到了解决方案,但如果var rowid = $(“#”+ controlid).attr(“rowid”);这是它没有采取控制的代码在你以前的代码..现在它是如何开始工作? –

+0

嘿@ SagarS.Dhanorkar,所有的代码是相同的只有变化是我选择.mychk复选框的方式是错误的。所以,它不会工作。你有没有注意到,在以前的帖子中,我用'this.id'这是错误的,它必须是$(this).attr( 'id')。但是在选择属性后,我得到了行ID,并且它工作...!:D –

0

首先要做到这一点没有回发,改变ASP-按钮,输入类型=按钮或HTML的按钮:

<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> 

,然后使用一个这样的脚本以隐藏的复选框。你不需要复选框此的ID,只要找出父行和隐藏复选框:

$(function() { 
    $(".showButton").on("click", function() { 
      $(this).closest("tr").find(":checkbox").hide(); 
    }); 
}); 
+0

这不会工作..! :( –

+0

为什么不是?你想隐藏复选框? – Esko

0

尝试用下面:

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(); 
+0

嗨@Sagar S.Dhanorkar,我已经将此粘贴在SetRowValues()javascript方法中,但它不会工作..!我做错了任何事情PLZ让我知道。 。 –

+0

你会plz解释代码我没有理解的东西.get(),.map&join()这些都是我的新东西..!so ..? –

相关问题