【问题标题】:disable textbox in gridview on specific condition在特定条件下禁用gridview中的文本框
【发布时间】:2014-02-09 18:33:37
【问题描述】:

我的网格视图中有文本框列。我想在某些情况下禁用我的文本框,即 当在 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 个文本框。

【问题讨论】:

  • 你能显示一些代码吗
  • 我只写了我的gridview数据绑定代码..
  • 很难理解你的问题的内容。也许发布一些图片/屏幕截图来描述你想要实现的目标。

标签: javascript asp.net c#-4.0


【解决方案1】:

这分为两部分。

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

到另一个文本框:

' Enabled='' Width="200px" CssClass="targetTxt">

然后,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 中的定位可能有点偏离,因为您需要根据您的网格布局进行定位,但它应该会让您接近。

试一试。

【讨论】:

  • 我有一个文本框列和一个日期列。当用户在文本框中输入值时,我必须禁用其他 gridview 文本框列。
  • 您将不得不发布您的标记以使这更容易...您希望这发生在客户端吗?所以不是网格中数据的条件,而是用户的输入?
  • 取决于用户在 gridview 文本框上的输入,我想禁用我的其他 gridview 行。
  • 好的,您将不得不发布您的标记以供任何人帮助。我猜它需要是客户端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 2014-10-03
  • 2014-10-25
相关资源
最近更新 更多