文本框不显示在c#文件后面的代码中

时间:2010-11-17 09:30:26

标签: c# forms textbox code-behind

我有一个用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);

所以我想要做的就是将此文本框设置为空或返回零。

感谢任何帮助,谢谢。

2 个答案:

答案 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 = “假”