我有一个用C#编写的销售模拟器。我没有写这个,但我正在修改它以满足不同的要求。
它基本上显示了数据库中的产品列表,并且每个产品都有一个文本框,您可以在其中输入销售数量。销售数量根据数据库中的价格计算。
现在一切正常,但是有一个小问题。单击“购买”时,它会将我返回到正确的产品列表,但是我为上一个产品输入的数量仍然存在。
我想知道在将数据提交到数据库之后如何将文本框恢复为默认值。
我一直认为这样做的方法是在.cs代码后面的文件
txtQuantity.Text = "";
然而,由于一些奇怪的原因,txtQuantity将不会出现。
任何人都可以想到我做错了吗?这是aspx文件中的一段代码。
<form id="form1" runat="server">
Date:
<asp:TextBox ID="txtDate" runat="server" />
Retailer:
<asp:DropDownList ID="dlStore" runat="server"
onselectedindexchanged="dlStore_SelectedIndexChanged" />
<asp:ListView ID="lbProducts" runat="server">
<LayoutTemplate>
<layouttemplate>
<table border="1" cellpadding="1" style="width:800px">
<tr style="background-color:#E5E5FE">
<th>ID</th>
<th>ProductCode</th>
<th>Product Title</th>
<th>RRP $</th>
<th>Quantity</th>
<th>Sale Price $</th>
</tr>
<tr id="itemPlaceholder" runat="server"></tr>
</table>
</layouttemplate>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td style="width: 50px;">
<%#Eval("ProductID") %>
</td>
<td>
<%#Eval("ProductCode") %>
</td>
<td>
<%#Eval("ProductTitle") %>
</td>
<td>
<%#Eval("USListPrice") %>
</td>
<td style="width: 50px;">
<asp:TextBox ID="txtQuantity" runat="server" Text="0" />
</td>
<td style="width: 50px;">
<asp:TextBox ID="txtSalePrice" runat="server" Text="0.00" />
</td>
</tr>
</ItemTemplate>
</asp:ListView>
<asp:Button ID="btnBuy" Text="Buy These Items" runat="server" OnClick="btnBuy_Click" />
<asp:Button ID="btnClear" Text="Clear Existing Sales" runat="server"
onclick="btnClear_Click" />
</form>
代码隐藏文件中有很多内容,我不希望任何人通过它,但我如何从txtQuantity收集数据是通过以下代码行完成的:
Int32 quantity = Int32.Parse(((TextBox)item.FindControl("txtQuantity")).Text);
所以我想要做的就是将此文本框设置为空或返回零。
感谢任何帮助,谢谢。
答案 0 :(得分:3)
因为txtQuantity
控件在ListView中,所以可能会生成该控件的任意数量的实例。因此,您无法通过单个变量访问所有这些变量。
您需要查看该ListView中的所有控件(以及深层次的几个)来查找所有txtQuantity控件。
txtSalePrice
控制当然也是如此。
修改强>
您可以找到包含(未经测试)
public IEnumerable<TextBox> FindTextBoxes(Control parent)
{
if (parent == null) yield break;
foreach (Control child in parent.Controls)
{
TextBox tb = child as TextBox;
if (tb != null)
yield return tb; // found one!
else
foreach(TextBox tb in FindTextBoxes(child))
yield return tb; // found it deeper
}
}
并称之为:
foreach(TextBox tb in FindTextBoxes(lbProducts)
{
if (tb.Name == "txtQuantity")
{
// found a quantity
}
else if (tb.Name == "txtSalePrice")
{
// found the salesprice
}
}
答案 1 :(得分:0)
您是否尝试过为文本框设置启用视图状态为false?的EnableViewState = “假”