开发者

textbox not displaying in code behind c# file

I have a sales simulator written in C#. I did not write this however I am currently modifying it to suit different requirements.

It basically displays a list of products from a database, and has a textbox for each product where you can enter in the quantity sold. The quantity sold is calculated based on it's price in the database.

Now it's all working fine, however there is one SMALL issue. When "Buy" is clicked, it returns me back to the list of products which IS correct, howeve开发者_Python百科r the quantity I have entered for the previous product remains.

I would like to know how to restore the text boxes to their default value when the after the data is submitted to the database.

I always thought the way to do this would be in the .cs code behind file

txtQuantity.Text = "";

However, for some odd reason, txtQuantity will not show up.

Can anyone think of anything I am doing wrong? Here is a snippet of code from the aspx file.

    <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>

There's a lot going on in the code behind file and I wouldn't expect anyone to go through it, but how I collect the data from txtQuantity is done with the following line of code:

Int32 quantity = Int32.Parse(((TextBox)item.FindControl("txtQuantity")).Text);

So what I want to be able to do is set this textbox either to be empty, or back to zero.

Any help is appreciated, thanks.


Because that txtQuantity control is within a ListView, there could be any number of instances of that control generated. So you can't access all of them through a single variable.

You will need to look through all controls within that ListView (and several levels deep) to find all your txtQuantity controls.

The same of course for the txtSalePrice control.

EDIT
You could find those textboxes with code like (untested)

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
   }
}

and call it like:

foreach(TextBox tb in FindTextBoxes(lbProducts)
{
   if (tb.Name == "txtQuantity")
   {
     // found a quantity 
   }
   else if (tb.Name == "txtSalePrice")
   {
     // found the salesprice
   }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜