текстовое поле не отображается в коде позади файла C # - PullRequest
0 голосов
/ 17 ноября 2010

У меня есть симулятор продаж, написанный на 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 ]

3 голосов
/ 17 ноября 2010

Поскольку этот элемент управления 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
   }
}
0 голосов
/ 17 ноября 2010

Пробовали ли вы установить для включенного состояния просмотра значение false для текстового поля?EnableViewState = "ложь"

...