我有一个带有许多模板字段的 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
绑定(bind)到它作为 TotalIssuedQty
然后我将通过 JavaScript 在另一个文本框 (txtIssuedQty
) 按键事件(也在 GridView 中)上计算“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。如果我使用文本框而不是 给它贴上标签是可能的,但使用标签如何获取它。
最佳答案
Sureshhh 我认为问题是因为当您单击服务器控制按钮时,页面控件会被加载,因此标签“lblIssuedTotalQty”再次绑定(bind)到 0.00,因此当您在后面的代码中访问它时,您会得到值为 0.00 .
正如您所提到的,如果您要使用不会绑定(bind)的文本框,可以使新的 js 计算值在后面的代码中可用。
修复:在 GridView 中的每一行上添加任何控件,您不会绑定(bind)该控件来获取其值(甚至可以是像您尝试过的测试框),并将其可见性设置为 false 。在js中将计算值设置到这个不可见的控件中并在后端获取它。
关于c# - 获取使用javascript计算的按钮单击事件上的gridview模板字段标签值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22224980/