繁体   English   中英

在 ascx 页 asp.net 上动态创建多个表

[英]Creating multiple tables dynamically on ascx page asp.net

我正在尝试基于 SurveyCount(ViewState 变量) 创建多个表并将它们填充到 ascx 页面本身,而不是使用后面的代码来填充数据。 显示的表格数量是正确的,但我无法使用 foreach 循环填充表格单元格。 表格单元格无法识别 c 变量。

<% if(SurveyCount > 0)
    {%>

    <% foreach(SurveyAvailabilities c in this.lstSurveyAvailabilities){%>


      <asp:Table id="Table2" runat ="server" GridLines="Both" HorizontalAlign="Center">
         <asp:TableHeaderRow    ForeColor="Snow" BackColor ="#8f001a"  Font-Bold="true" >
                    <asp:TableHeaderCell>Year</asp:TableHeaderCell>
                    <asp:TableHeaderCell>Language</asp:TableHeaderCell>
                    <asp:TableHeaderCell>Grade</asp:TableHeaderCell>
                    <asp:TableHeaderCell>Subject</asp:TableHeaderCell>
          </asp:TableHeaderRow>
    
          <asp:TableRow>
                <asp:TableCell Text="0" />
                <asp:TableCell Text="1" />
                <asp:TableCell><%= c.Grade%></asp:TableCell>
                <asp:TableCell><%= c.Subject%></asp:TableCell>
          </asp:TableRow>
        
    
        </asp:Table>  
<textarea><%= c.Grade%></textarea>
    <br>
     <% } %>
 <% } %>

文本区域正确识别元素,但不能正确识别表格单元格。 我不想使用 Gridview 或中继器。 如何遍历列表并填充表格单元格?

而不是使用后面的代码来填充数据。

好吧,当您开始放置“<% 和一些 c# 代码的那一刻?您实际上是在使用代码背后和服务器端代码 - 该代码成为页面背后代码的一部分。所以,说您“试图”避免代码落后,但随后转身开始为 web 页面编写一些代码,对吧???

现在,我真希望我们有一个重量更轻的 gridview 版本。 而且通常 listview 更好(因为它遵循标准的 html 表相当接近)。

那么,在一天结束的时候呢? 在我看来,是为了节省代码、时间、精力,并在很大程度上拯救世界贫困?

我想如果你想要一些重复表? 好吧,还有一个叫做 REPEAter 的东西 - (名副其实。!!)。

假设你有一个中继器控制,然后你可以在里面放一个 GV?

除非你有一个很棒的理由和理由这样做,否则很难提出一个理由去尝试一条不同的道路。 (你没有这样做)。

除非存在一些令人信服的巨大案例,否则似乎一个简单的方法是最好的方法,并且还可以节省所有时间作为奖励。

我的意思是,这个简单的标记——我们可以有 2 个或 15 个表。

        <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
            <ItemTemplate>

            <asp:Label id="MyHeader" runat="server" Text='<%# Eval("TableGroup") %>' Font-Size="X-Large" >
            </asp:Label>

             <asp:GridView ID="GTable" runat="server"
                 class="table table-responsive-sm table-bordered table-hover" Width="20%">
             </asp:GridView>

            </ItemTemplate>
        </asp:Repeater>

我的意思是,天哪,标记已经比你发布的少了。

以及加载转发器的代码——比如表格的来源——甚至是一个列表?

说这个:

        DataTable TblList = new DataTable();
        TblList.Columns.Add("TableGroup");

        for (int i = 1;i<=3;i++)
        {
            DataRow OneRow = TblList.NewRow();
            OneRow["TableGroup"] = "Table " + i;
            TblList.Rows.Add(OneRow);
        }

        Repeater1.DataSource = TblList;
        Repeater1.DataBind();

以上将给我们3张桌子。! - 没有很多代码。

对于每个集合,我们使用 Item 数据绑定。 说这个:

    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        // each new group/thing, lets fill the grid/table
        GridView gV = (GridView)e.Item.FindControl("GTable");
        DataTable TestTable = new DataTable();
        TestTable.Columns.Add("Name");
        TestTable.Columns.Add("Age");

        int TableGroup = e.Item.ItemIndex + 1;
        // add 3 rows
        for (int i = 1; i <= 3; i++)
        {
            DataRow OneRow = TestTable.NewRow();
            OneRow["Name"] = "Group " + TableGroup + " Name " + i;
            OneRow["Age"] = i * 15;
            TestTable.Rows.Add(OneRow);
        }
        gV.DataSource = TestTable;
        gV.DataBind();
    }

现在我们得到了这个:

在此处输入图像描述

我的意思是,上面的内容在更少的时间内完成了,然后我才花了我写这篇文章的时间。

你要问你活了多久,你有多少天,每一天对你来说值多少钱? 上面已经完成了,事实上我要去买一个披萨了。 你? 您还在这里尝试编写和拼凑一些代码。

所以,试试上面的简单想法 - 哦,这么简单,然后你就有空去 go 出去吃披萨了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM