在特定条件下禁用gridview中的文本框

时间:2014-02-09 18:33:38

标签: javascript asp.net c#-4.0

我的gridview中有textbox列。我想在某些条件下禁用我的文本框,即 当在texbox中输入的值为2000时,“2000/500 = 4”文本框将在其他行上禁用,它应该是某个值的倍数。

我不知道应该在gridview中触发哪个事件或使用javascript来处理textboxchange event

这是我的网格视图代码.aspx

                                                                                                                                                                                                                                                           

                     <asp:TemplateField HeaderText="Installment No.">
                        <ItemTemplate>
                            <asp:Label ID="LblInstl" runat="server" Text='<%#Eval("InstallmentNo") %>' Font-Bold="True"></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Due Date">
                        <ItemTemplate>
                            <asp:Label ID="LbldueDate" runat="server" Text='<%#Eval("DueDate") %>' Font-Bold="True" ></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Deposit Date">
                        <ItemTemplate>
                            <asp:TextBox runat="server" Text='<%#Eval("Datedeposit") %>'  Enabled='<%# (string) Eval("Datedeposit") == "" %>'  ID="TxtdepositDate" Width="200px"></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Amount">
                        <ItemTemplate>
                            <asp:TextBox ID="TxtAmount" runat="server" Text='<%#Eval("Amount") %>' Enabled='<%# (string) Eval("Amount") == "" %>' Width="200px"></asp:TextBox>
                            <asp:HiddenField runat="server" ID="Hdn" Value='<%#Eval("InstallmentAmount") %>'/>
                        </ItemTemplate>
                    </asp:TemplateField>


                </Columns>
                </asp:GridView>

如果用户在Textamount中输入的金额大于500,那么我想要禁用gridview行的下一个3文本框。

1 个答案:

答案 0 :(得分:0)

这分为两部分。

第1部分 在运行时

您应该查看RowDataBound事件:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound(v=vs.100).aspx

所以GridView的声明是

<asp:GridView id="grd" runat="server" OnRowDataBound="grd_RowDataBound">

然后在代码隐藏中,您可以检查e的条件,如上例所示:

protected void grd_RowDataBound(Object sender, GridViewRowEventArgs e)
{    
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
      // Display the company name in italics.
      if(int.Parse(((TextBox)e.Row.Cells[2].FindCOntrol("TxtdepositDate")).Text) > 500)
      {
         (((TextBox)e.Row.Cells[2].FindCOntrol("TxtAmount")).Enabled = false;
      }     
    }    
}

第2部分 客户端

然后,当客户端输入文本时,我会使用jQuery来禁用文本框:

首先,在文本框中添加一个类:

<asp:TextBox runat="server" Text='<%#Eval("Datedeposit") %>'  Enabled='<%# (string) Eval("Datedeposit") == "" %>'  ID="TxtdepositDate" Width="200px" CssClass="watchedAmt"></asp:TextBox>

另一个文本框:

'已启用='&lt;%#(字符串)Eval(“金额”)==“”%&gt;'宽度=“200px”CssClass =“targetTxt”&gt;

然后,jQuery可以更容易地关注这些文本框:

$(".watchedAmt").change(function() {
    if(parseInt($(this).val()) > 500) {
        $(this).parent().next().child(".targetTxt").attr("disabled", "disabled");
    } else {
        $(this).parent().next().child(".targetTxt").removeAttr("disabled");
    };
});

jQuery中的定位可能有些偏差,因为您需要根据网格布局进行定位,但它应该让您接近。

试一试。

相关问题