2010-11-17 97 views
0

我有用C#編寫的銷售模擬器。我沒有寫這個,但是我現在正在修改它以適應不同的要求。文本框不顯示在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

首先,你應該檢查txtQuantity和txtSalePrice的任何地方設置在ListView的綁定事件處理程序中。我可以想象,內部有一個Order Object,它保存數量,並在提交後綁定到列表視圖,但不知道代碼是不可能說出發生了什麼。 – 2010-11-17 09:35:14

+0

另外,您在提交訂單後,實際上會將用戶重定向到確認頁面/訂單狀態頁面。 – 2010-11-17 09:39:39

+0

@ovm,感謝您的回覆,我會檢查出來。此外,如果數據已成功提交,我的頁面上會有一個標籤顯示給用戶,但是我只是爲了顯示更多相關位代碼而將其拿出來。 – 109221793 2010-11-17 09:49:20

回答

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

這正是我想象中發生的事情。你有什麼想法我是如何做到這一點的? – 109221793 2010-11-17 10:35:18

0

您是否嘗試將啓用視圖狀態設置爲false爲文本框? EnableViewState =「false」

+0

我剛纔。我害怕似乎不適合我。 – 109221793 2010-11-17 09:55:14

+0

網格中的文本框是什麼?電網在某個時候是否受到約束?我想知道你的更新值是否沒有被綁定回網格?我必須承認,我會認爲設置文本屬性將始終確保這是默認值。 – hoakey 2010-11-17 10:03:11

+0

不,該文本框只是在一個列表視圖。奇怪的是它甚至在代碼背後沒有顯示出來。例如,如果我輸入txtQuantity.Text ....它根本不會顯示出來。 – 109221793 2010-11-17 10:11:40

相關問題