【问题标题】:enable button in gridview with jquery使用jquery在gridview中启用按钮
【发布时间】:2016-11-24 13:26:35
【问题描述】:

我有一个gridview,它在页脚中将总值放在grandTotalPCT 中。如果grandTotalPCT 不等于 100,我希望按钮 btnUpdatePCTD 保持禁用状态,如果它等于 100,则启用该按钮。

下面的代码是从另一个函数调用的,它随着grandTotalPCT 值的变化而工作。问题是按钮状态没有改变。

<asp:TemplateField HeaderText="Line" ItemStyle-Width="50%">
    <ItemTemplate>
        <asp:Label ID="lblLineD" runat="server" Text='<%# Bind("line") %>'></asp:Label>
    </ItemTemplate>
    <FooterTemplate>
        <asp:Button ID="btnUpdatePCTD" runat="server" Text="Update" CssClass="btn btn-default btn-sm" OnClick="updateDockPCT"  Enabled="False" />
    </FooterTemplate>
    <FooterStyle HorizontalAlign="Center" />
</asp:TemplateField>

<asp:TemplateField HeaderText="% Target" ItemStyle-Width="25%">
    <ItemTemplate>
        <asp:TextBox ID="tbPTC" runat="server" Text='<%# Convert.ToDouble(Eval("dailypercent")) * 100 %>' CssClass="tbPTC"></asp:TextBox>
    </ItemTemplate>
    <FooterTemplate>
        <asp:Label ID="grandTotalPCT" runat="server" CssClass="grandTotalPCT"></asp:Label>
    </FooterTemplate>
</asp:TemplateField>

//To get grand Total PCT
function CalculateGrandTotalPCT() {
    var grandTotalPCT = 0.0;
    $('#<%=gvDockPCT.ClientID %> tr:gt(0)').each(function () {
        grandTotalPCT = grandTotalPCT + parseFloat($(this).find('.tbPTC').length == 0 || !$(this).find('.tbPTC').val() ? 0 : $(this).find('.tbPTC').val());

    });
    $('#<%=gvDockPCT.ClientID %> .grandTotalPCT').text(grandTotalPCT.toFixed(3));
    if (grandTotalPCT.toFixed(3) == 100.000)
    {
        $('#<%=gvDockPCT.ClientID %> .btnUpdatePCTD').prop('disabled', false);
    }
    else
    {
        $('#<%=gvDockPCT.ClientID %> .btnUpdatePCTD').prop('disabled', true);
    }
}

【问题讨论】:

    标签: c# jquery asp.net gridview


    【解决方案1】:

    我必须将按钮名称添加到 cssclass CssClass="btnUpdatePCTD btn btn-default btn-sm"

    <asp:Button ID="btnUpdatePCTD" runat="server" Text="Update" CssClass="btnUpdatePCTD btn btn-default btn-sm" OnClick="updateDockPCT"  Enabled="False" />
    

    【讨论】:

      【解决方案2】:

      我建议使用 OnRowDataBound 事件而不是 jQuery。

          decimal totalValue = 0;
      
          protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
          {
              if (e.Row.RowType == DataControlRowType.DataRow)
              {
                  DataRowView row = e.Row.DataItem as DataRowView;
                  totalValue += Convert.ToDecimal(row["tocht_id"]);
              }
              else if (e.Row.RowType == DataControlRowType.Footer)
              {
                  if (totalValue == 100)
                  {
                      Button button = e.Row.FindControl("btnUpdatePCTD") as Button;
                      button.Enabled = false;
                  }
      
                  Label label = e.Row.FindControl("grandTotalPCT") as Label;
                  label.Text = string.Format("{0:N2}", GridView1.Rows.Count);
              }
          }
      

      【讨论】:

      • 我不是在计算行数,而是对所有行的值求和。使用 blur 方法更改字段时重新计算总数。
      • $('input[type="submit"]').prop('disabled', false) 有效,但它会禁用所有按钮。
      • 您可以扩展 RowDataBound 以包含行及其值,请参阅我更新的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      相关资源
      最近更新 更多