【问题标题】:Get gridview template field Label value on button click event which is calculated using javascript获取使用javascript计算的按钮单击事件上的gridview模板字段标签值
【发布时间】:2014-04-09 02:50:06
【问题描述】:

我有一个带有许多模板字段的 Gridview(gvMRVdetails),一个是,

<asp:TemplateField HeaderText="Issued Total Qty" ItemStyle-Width="8%" ControlStyle-Width="98%">
    <ItemTemplate>
        <asp:Label ID="lblIssuedTotalQty" runat="server" Text='<%#Bind("TotalIssuedQty") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

最初我将 0.00 绑定到它作为 TotalIssuedQty

然后我将通过 javascript 在另一个文本框 (txtIssuedQty) 按键事件上计算“lblIssuedTotalQty”的新值,该事件也在网格视图中。 我可以通过关注来分配它的值

function CalculateTotalQty(obj) {
        var grid = document.getElementById('<%=gvMRVdetails.ClientID %>');
        var rwIndex = 1;
        var gvRowCount = grid.rows.length;
        if (grid != null) {
            for (rwIndex; rwIndex <= gvRowCount - 1; rwIndex++) {

                var txtIssuedQty = grid.rows[rwIndex].cells[4].firstChild;
                var lblIssuedTotalQty = grid.rows[rwIndex].cells[9].firstChild;
                lblIssuedTotalQty.innerText = parseFloat(txtIssuedQty.value)*2 
                }
            }

它将是可见的 例如,如果我在 txtIssuedQty 输入 2.5 , lblIssuedTotalQty 将显示 5。它工作正常。 但我的问题是 我想在ButtonClickevent中获取动态计算的值

 protected void btnAllocate_Click(object sender, EventArgs e)
    {
            foreach (GridViewRow GVR in gvMRVdetails.Rows)
            {
                    Label a = GVR.FindControl("lblIssuedTotalQty") as Label;
                    string s = a.Text;
        }
    }

我只能在 s 中获得初始值 0.00。我无法在 s 中获得 5。如果我使用文本框而不是 标记它,可以,但使用标签如何获得它。

【问题讨论】:

    标签: c# javascript asp.net c#-4.0 gridview


    【解决方案1】:

    Sureshhh 我认为问题在于,当您单击服务器控制按钮时,页面控件会被加载,因此标签“lblIssuedTotalQty”再次绑定到 0.00,因此当您在后面的代码中访问它时,您会得到 0.00 的值.

    正如您所提到的,如果您要使用不会被绑定的文本框,可以使新的 js 计算值在后面的代码中可用。

    FIX:添加任何控件,您不会绑定这些控件以在网格视图中的每一行上获取其值(甚至可以是您尝试过的测试框)并将其可见性设置为 false 。在js中将计算的值设置为这个不可见的控件,并在后端获取它。

    【讨论】:

    • 我们可以在javascript中使用可见的虚假控件吗?
    • 您能否进一步解释一下,以便我可以提供帮助,因为我无法理解您评论中的“javascript 中可见的错误控件”。也告诉我你为什么需要可见的控制。
    • 根据我的观察,我们不能在javascript中使用(赋值或使用值进行计算)控件(如Textbox或Label等)。如果我们想使用它,应该设置Visible="真的”。我说的对吗?
    • @sureshhh:这个线程还活跃吗?
    • 我已将这些标签更改为文本框。对我来说效果很好。但我对你的回答有些疑问。
    【解决方案2】:

    标签文本值在客户端更改时不会在回发时保留其值。你有两个选择:

    1) 尝试从发布的表单值中获取值,如下所示:

    Label a = GVR.FindControl("lblIssuedTotalQty") as Label;
    string s = Request[a.UniqueID] as string;
    

    2) 在客户端使用隐藏字段来存储您的值,然后在回发时检索它。 设置隐藏字段的值,然后您可以从代码隐藏中检索它

     <ItemTemplate>
        <asp:Label ID="lblIssuedTotalQty" runat="server" Text='<%#Bind("TotalIssuedQty") %>'>/asp:Label>
        <asp:hiddenfield id="hdnIssuedTotalQty"  runat="server"/>
    </ItemTemplate>
    

    【讨论】:

    • 它是一个网格视图列,GV 可以有这么多行来存储这么多的值在 HF 中
    • 向您的模板添加隐藏字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多