在用户控制页面的列表视图中访问动态创建的表的文本框

本文关键字:动态 访问 创建 文本 视图 控制 用户 列表 | 更新日期: 2023-09-27 18:25:19

我正在使用asp.net和C#创建web模板。在我的用户控制页面中,我必须在列表视图中动态创建表。我只是从XML文件中读取数据,然后检索每个表的名称、列数和行数。在创建表格时,我会为每个单元格指定名称和id。在这个动态表中,一旦用户单击每行的编辑按钮,该行的所有单元格都将变为textbox。则用户可以改变该CCD_ 2的数据,但在我的更新功能中,我无法通过CCD_ 4访问这些CCD_。以下是我在ItemDataBound函数中创建的动态表代码:

System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
TableRow tr_DataBound = new TableRow();
TableCell tc_DataBound = new TableCell();
for (int i = 1; i <= pkCounter + nonPkCounter; i++)
            {
                //tc_DataBound = new TableCell();
                tc_DataBound = new TableCell();
                TextBox tb = new TextBox();
                //(TextBox)e.Item.FindControl("td_EditTemp" + i);
                tb.Width = 110;
                tb.Text = rowView[i - 1].ToString();
                tb.ID = "td_EditTemp" + i;
                tc_DataBound.Controls.Add(tb);
                tc_DataBound.CssClass = "th_ItemTemplate";
                tr_DataBound.Cells.Add(tc_DataBound);
            }
        tr_DataBound.Cells.Add(tc_DataBound);
        Table table_Lv_ItemTemplate = (Table)e.Item.FindControl("Table_Lv_ItemTemplate");
        table_Lv_ItemTemplate.Rows.Add(tr_DataBound);

我的listview代码是:

<asp:ListView ID="lv_Uc_Module" runat="server"
                    onitemediting="lv_Uc_Module_ItemEditing" 
                    onitemcanceling="lv_Uc_Module_ItemCanceling" 
                    onitemdeleting="lv_Uc_Module_ItemDeleting"  
                    OnItemDataBound="lv_Uc_Module_ItemDataBound"
                    OnSorting="lv_Uc_Module_Sorting">
                        <LayoutTemplate>
                            <asp:Table runat="server" ID="table_Lv_Layout">
                                <asp:TableRow runat="server" ID="tr_Table_Layout">
                                    <asp:TableCell runat="server" ID="td_Table_Layout">
                                        <asp:Table runat="server" ID="itemPlaceholderContainer">
                                            <asp:TableRow runat="server" ID="tr_Table_IphContainer">
                                                <asp:TableHeaderCell runat="server">
                                                    <asp:PlaceHolder ID="th_Ph_Lv_header" runat="server"></asp:PlaceHolder>
                                                </asp:TableHeaderCell>
                                            </asp:TableRow>
                                            <asp:TableRow runat="server">
                                                <asp:TableCell runat="server">
                                                    <asp:PlaceHolder runat="server" ID="itemPlaceholder" />
                                                </asp:TableCell>
                                            </asp:TableRow>
                                        </asp:Table>
                                    </asp:TableCell>
                                </asp:TableRow>
                                <asp:TableRow runat="server" ID="tr_Validate_Table_Layout">
                                    <asp:TableCell runat="server" ID="td_Validate_Table_Layout" HorizontalAlign="Center" BackColor="#CCCCCC">
                                        <asp:ValidationSummary ID="ValidationSummary1" runat="server" HeaderText="You received the following errors:" ShowMessageBox="true" ShowSummary="false" ValidationGroup="VGEditTmp" />
                                    </asp:TableCell>
                                </asp:TableRow>
                            </asp:Table>
                            <br />
                            <asp:DataPager ID="lv_DataPager" runat="server" PagedControlID="lv_Uc_Module" PageSize="25" OnPreRender="lv_DataPager_PreRender">
                                <Fields>
                                    <asp:NextPreviousPagerField ButtonType="Image" ShowFirstPageButton="true" ShowLastPageButton="true" FirstPageImageUrl="~/Images/First.png" LastPageImageUrl="~/Images/Last.png" NextPageImageUrl="~/Images/Next.png" PreviousPageImageUrl="~/Images/Previous.png" />
                                    <asp:TemplatePagerField>
                                        <PagerTemplate>
                                            <span style="color:Blue;">
                                            </span>
                                        </PagerTemplate>
                                    </asp:TemplatePagerField>
                                </Fields>
                            </asp:DataPager>
                        </LayoutTemplate>
                        <ItemTemplate>
                            <asp:TableRow runat="server">
                                <asp:TableCell runat="server">
                                    <asp:Table runat="server" ID="Table_Lv_ItemTemplate"></asp:Table>
                                </asp:TableCell>
                                <asp:TableCell runat="server">
                                    <asp:Button ID="btn_Edit" runat="server" CommandName="Edit" Text="" CssClass="btn_Edit" CausesValidation="True" Visible="false" />
                                    <asp:Button ID="btn_Delete" runat="server" CommandName="Delete" Text="" CssClass="btn_Delete" CausesValidation="false" OnClientClick="return confirm('Are you sure you want to delete this item?');" Visible="false" />
                                </asp:TableCell>
                            </asp:TableRow>
                        </ItemTemplate>
                    </asp:ListView>

我在代码后面的更新函数中使用以下方法来访问textbox:上更改的数据

TextBox tb = (lv_Uc_Module.Items[e].FindControl("td_EditTemp" + i + "_" + e)) as TextBox;

你能指导我如何访问这些textboxes数据吗
感谢您的考虑。

在用户控制页面的列表视图中访问动态创建的表的文本框

您看过使用asp:repeater吗?

它使创建动态控件变得更加简单,尤其是当您使用"Data_Bound"事件时。

看看这里的中继器示例。