1

我已经为此苦苦挣扎了几个小时,似乎无法在网上找到答案。我在网上找到的几种做法都没有完成这项工作,所以我想我做错了什么。

我创建了一个 Table 对象,放置了几个 TableRow 对象,我在这些对象下放置了 TableCell。此表的一列由我创建的 TextBox 对象组成:

Table productTable = new Table();
int j = 0;
foreach (Product i in prodList)
        {
            TextBox qttyTB = new TextBox();
            qttyTB.ID = "Quantity" + Convert.ToString(j);
            qttyTB.Style["width"] = "30px";
            qttyTB.Text = "0";
            TableRow tableR = new TableRow();
            TableCell tableC1 = new TableCell();
            tableC1.Text = "<img src='" + i.ImagePath + "' class='ProductImage'/>";
            tableR.Controls.Add(tableC1);
            TableCell tableC2 = new TableCell();
            tableC2.Text = i.Name + "&nbsp;&nbsp;&nbsp;&nbsp;";
            tableR.Controls.Add(tableC2);
            TableCell tableC3 = new TableCell();
            tableC3.Text = i.Price + "&nbsp;&#8362;&nbsp;&nbsp;&nbsp;&nbsp;";
            tableR.Controls.Add(tableC3);
            TableCell tableC4 = new TableCell();
            tableC4.Controls.Add(tbArray[j - 1]);
            tableR.Controls.Add(tableC4);
            productTable.Controls.Add(tableR);
            j++;
        }
TablePH.Controls.Add(productTable);

页面输出工作 100%。现在,单击按钮后,我试图保留已创建的 TextBox 对象的值。尝试了几件事。

4

1 回答 1

0

在 CodeBehind 中填充表通常是一种不好的做法,应该避免,因为您将视图和业务逻辑问题分开。

如果您要从数据库中检索产品,那么您希望在 .aspx 文件中添加类似的内容。如果不是 SQL,那么您可以通过谷歌搜索找到其他数据源。

 <asp:SqlDataSource ID="SelectItemsDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:hubConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:hubConnectionString.ProviderName %>" 

        SelectCommand="SELECT itemEntity.id, itemEntity.name, itemEntity.filename, itemEntity.type, itemEntity.added, userEntity.name FROM item AS itemEntity 
                        LEFT OUTER JOIN USER AS userEntity ON itemEntity.uploader = userEntity.id WHERE itemEntity.type like @type ORDER BY itemEntity.added DESC" 
        OnSelecting="onItemSelecting"> 
        <SelectParameters>
           <asp:Parameter Name="@type" Type="String" />
        </SelectParameters>       
</asp:SqlDataSource>

然后在定义表格的地方,根据需要添加不同类型的字段。注意:由 <%# x %> 包围的属性值正在调用代码隐藏中的函数。

<asp:GridView ID="ItemGrid" runat="server" DataSourceID="SelectItemsDataSource" class="itemGrid"
    AutoGenerateColumns="False" AllowPaging="True" AllowSorting="True" 
    CellPadding="4" ForeColor="#333333" GridLines="None">
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    <Columns>
        <asp:TemplateField HeaderText="File type">
            <ItemTemplate>
                <asp:Image runat="server" ID="mediaImage"
                    ImageUrl='<%# GetImageUrl(Eval("type") as string) %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Preview">
            <ItemTemplate>
                <a runat="server" id="mediaPreview" href='<%# GetPreviewUrl(Eval("id").ToString()) %>'>Play</a>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:HyperLinkField DataTextField="name" DataNavigateUrlFields="id" DataNavigateUrlFormatString="Download.aspx?FileID={0}" HeaderText="Name"/>            
        <asp:BoundField HeaderText="Uploaded date" 
            DataField="added" DataFormatString="{0:d MMMM, yyyy}" SortExpression="added">
        </asp:BoundField>
        <asp:BoundField HeaderText="Uploaded by" 
            DataField="name1" SortExpression="name1">
        </asp:BoundField>
    </Columns>
</asp:GridView>
于 2012-12-09T18:07:55.190 回答