ASP.NET 中 Repeater Control 的条件语句

Conditional statement for Repeater Controll in ASP.NET

我使用随附的代码在 ASP.NET (VB) 中使用转发器控件在具有 6 列的 table 中填充一些数据。

我想要一段代码通过将 if/elseif/else 条件附加到转发器控件来实现以下功能:

  1. 对于带有<%#Eval("SOLID")%> = "40103" 的记录,然后将数据显示在一个单元格中,将所有 6 列合并为一列(理想情况下使用 colspan = 6)。

  2. 对于具有 <%#Eval("SOLID")%> = "40105" 的记录,则数据将显示在两个单元格中,合并第二列和第三列。

  3. 对于所有其他记录,数据将以实际格式显示。

我翻遍了各个网站寻找解决方案,但都无济于事。请帮助我

<asp:Repeater ID="Repeater3" runat="server">           
    <headertemplate>
        <tr style="height:25px;vertical-align:middle">
            <th class ="dg_rpt_center" align="left" width = "10%" >
                <asp:Label ID="Label7"  runat="server" class ="lbl105" >SOLID</asp:Label></th>
            <th class ="dg_rpt_center" align="left" width = "30%">
                <asp:Label ID="Label10"  runat="server" class ="lbl105" >SOL Name</asp:Label></th>
            <th class ="dg_rpt_center" align="right" width = "10%">
                <asp:Label ID="Label11"  runat="server" class ="lbl105" >Target</asp:Label></th>
            <th class ="dg_rpt_center" align="right" width = "10%">
                <asp:Label ID="Label12"  runat="server" class ="lbl105" >Achievement</asp:Label></th>      
            <th class ="dg_rpt_center" align="right" width = "10%">
                <asp:Label ID="Label13"  runat="server" class ="lbl105" >Margin</asp:Label></th>
            <th class ="dg_rpt_center" align="right" width = "10%" >
                <asp:Label ID="Label14"  runat="server" class ="lbl105" >Growth</asp:Label></th>
        </tr>
    </headertemplate>
    <ItemTemplate>
        <tr>
            <td align="left" width = "10%"><asp:LinkButton ID="lblsolid"  runat="server" class ="lbl9N" Text='<%#Eval("SOLID")%>' OnClick='subDtClick' CommandArgument='<%#Eval("SLNO")%>'></asp:LinkButton></td>
            <td align="left" width = "30%"><asp:Label ID="lblsolname"  runat="server" class ="lbl9N" Text='<%#Eval("NAME")%>'></asp:Label></td>
            <td align="right" width = "10%"><asp:Label ID="lbltgt"  runat="server" class ="lbl9N" Text='<%#Eval("TGT")%>'></asp:Label></td>
            <td align="right" width = "10%"><asp:Label ID="lblach"  runat="server" class ="lbl9N" Text='<%#Eval("ACH")%>'></asp:Label></td>
            <td align="right" width = "10%"><asp:Label ID="lblmrgn"  runat="server" class ="lbl9N" Text='<%#Eval("MGR")%>'></asp:Label></td>
            <td align="right" width = "10%"><asp:Label ID="lblgr"  runat="server" class ="lbl9N" Text='<%#Eval("GRW")%>'></asp:Label></td>
        </tr>
     </ItemTemplate>
</asp:Repeater>

为此,您可以在 Repeater 控件的 ItemDataBound 事件中编写您的逻辑。您需要获取 table 单元格和标签的引用,然后设置 colspan、合并标签值并隐藏任何额外的单元格。

ASPX 页面

<asp:Repeater ID="Repeater3" runat="server" OnItemDataBound="Repeater3_ItemDataBound">
            <HeaderTemplate>
                <tr style="height: 25px; vertical-align: middle">
                    <th class="dg_rpt_center" align="left" width="10%">
                        <asp:Label ID="Label7" runat="server" class="lbl105">SOLID</asp:Label></th>
                    <th class="dg_rpt_center" align="left" width="30%">
                        <asp:Label ID="Label10" runat="server" class="lbl105">SOL Name</asp:Label></th>
                    <th class="dg_rpt_center" align="right" width="10%">
                        <asp:Label ID="Label11" runat="server" class="lbl105">Target</asp:Label></th>
                    <th class="dg_rpt_center" align="right" width="10%">
                        <asp:Label ID="Label12" runat="server" class="lbl105">Achievement</asp:Label></th>
                    <th class="dg_rpt_center" align="right" width="10%">
                        <asp:Label ID="Label13" runat="server" class="lbl105">Margin</asp:Label></th>
                    <th class="dg_rpt_center" align="right" width="10%">
                        <asp:Label ID="Label14" runat="server" class="lbl105">Growth</asp:Label></th>
                </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td id="tdSOLID" runat="server" align="left" width="10%">
                        <asp:LinkButton ID="lblsolid" runat="server" class="lbl9N" Text='<%#Eval("SOLID")%>' CommandArgument='<%#Eval("SLNO")%>'></asp:LinkButton></td>
                    <td id="tdNAME" runat="server" align="left" width="30%">
                        <asp:Label ID="lblsolname" runat="server" class="lbl9N" Text='<%#Eval("NAME")%>'></asp:Label></td>
                    <td id="tdTGT" runat="server" align="right" width="10%">
                        <asp:Label ID="lbltgt" runat="server" class="lbl9N" Text='<%#Eval("TGT")%>'></asp:Label></td>
                    <td id="tdACH" runat="server" align="right" width="10%">
                        <asp:Label ID="lblach" runat="server" class="lbl9N" Text='<%#Eval("ACH")%>'></asp:Label></td>
                    <td id="tdMGR" runat="server" align="right" width="10%">
                        <asp:Label ID="lblmrgn" runat="server" class="lbl9N" Text='<%#Eval("MGR")%>'></asp:Label></td>
                    <td id="tdGRW" runat="server" align="right" width="10%">
                        <asp:Label ID="lblgr" runat="server" class="lbl9N" Text='<%#Eval("GRW")%>'></asp:Label></td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>

代码隐藏

public void Repeater3_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {

            var lblsolid = (LinkButton)e.Item.FindControl("lblsolid");

            if (lblsolid.CommandArgument == "40103" || lblsolid.CommandArgument == "40105") {

                //Labels
                var lblsolname = (Label) e.Item.FindControl("lblsolname");
                var lbltgt = (Label) e.Item.FindControl("lbltgt");
                var lblach = (Label) e.Item.FindControl("lblach");
                var lblmrgn = (Label) e.Item.FindControl("lblmrgn");
                var lblgr = (Label) e.Item.FindControl("lblgr");

                //Table Cells
                var tdSOLID = (HtmlTableCell)e.Item.FindControl("tdSOLID");
                var tdNAME = (HtmlTableCell)e.Item.FindControl("tdNAME");
                var tdTGT = (HtmlTableCell)e.Item.FindControl("tdTGT");
                var tdACH = (HtmlTableCell)e.Item.FindControl("tdACH");
                var tdMGR = (HtmlTableCell)e.Item.FindControl("tdMGR");
                var tdGRW = (HtmlTableCell)e.Item.FindControl("tdGRW");

                if (lblsolid.CommandArgument == "40103") {
                    //merge all label values into a single string
                    var mergedCellValues = string.Format("{0} {1} {2} {3} {4}", lblsolname.Text, lbltgt.Text, lblach.Text, lblmrgn.Text, lblgr.Text);

                    //set the text value of the first table cell and span it 6 columns
                    tdSOLID.InnerText = mergedCellValues;
                    tdSOLID.Attributes.Add("colspan", "6");

                    //remove extra cells
                    tdNAME.Visible = false;
                    tdTGT.Visible = false;
                    tdACH.Visible = false;
                    tdMGR.Visible = false;
                    tdGRW.Visible = false;
                } else if (lblsolid.CommandArgument == "40105") {
                    //same concept as above, but with different colspan and cell hiding
                }

            }

        }
    }