我有一个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.It工作正常。
但我的问题是
我想在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。我无法获得5 in s。如果我使用的是文本框而不是 标签,可能但使用标签如何获得它。
答案 0 :(得分:1)
在客户端更改时,标签文本值不会在回发时保留它的值。您有两种选择:
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>
答案 1 :(得分:1)
Sureshhh我认为问题是因为当您单击服务器控件按钮时,页面控件被加载,因此标签'lblIssuedTotalQty'再次绑定到0.00,因此当您在后面的代码中访问它时,您获得的值为0.00
正如您所提到的,如果您打算使用不会被绑定的文本框,可以在后面的代码中使用新的js计算值。
FIX:添加任何控件,你不会绑定它在网格视图中的每一行上获取它的值(它可能就像你试过的那样测试框)并将其可见性设置为false 即可。在js中,将计算值设置为此不可见控件,并在后端获取它。