如何使转发器中的选定项目加粗

时间:2014-12-16 15:03:55

标签: asp.net vb.net repeater

我在查找如何在ASP.NET Repeater控件中以粗体显示所选项时遇到了一些麻烦。

基本上我想做的是突出某个州的人。该页面有一个查询字符串(在这种情况下,返回的值是" WA"),我希望无论状态出现在哪里,相应的值都将为粗体,其他值保持正常。因此,如果一个西澳大利亚州的人在2008年排名第二,那将是大胆的,那么如果一位来自新南威尔士州的司机在2009年排名第二,那么它就不会大胆。

我已经浏览了论坛和Google,并找到了如何突出显示行,而不是重复中的值/单元格。

下面是我的HTML。目前的代码隐藏非常简单,只返回名称和状态。我假设必须在Databinder中完成一些事情?

        <asp:Repeater ID="rptAustChampions" runat="server">
        <HeaderTemplate>
            <div class="DataTableHeading">
                <div class="DataTableCellSeason"><strong>Season</strong></div>
                <div class="DataTableCell"><strong>Champion</strong></div>
                <div class="DataTableCell"><strong>Runner Up</strong></div>
                <div class="DataTableCell"><strong>3rd</strong></div>
                <div class="DataTableCell"><strong>Track</strong></div>
            </div>
        </HeaderTemplate>
        <ItemTemplate>
            <div>
                <div class="DataTableCellSeason"><strong><%#DataBinder.Eval(Container.DataItem, "Season")%></strong></div>
                <div class="DataTableCell"><%#DataBinder.Eval(Container.DataItem, "First")%></div>
                <div class="DataTableCell"><%#DataBinder.Eval(Container.DataItem, "Second")%></div>
                <div class="DataTableCell"><%#DataBinder.Eval(Container.DataItem, "Third")%></strong></div>
                <div class="DataTableCell"><%#DataBinder.Eval(Container.DataItem, "Track")%></div>
            </div>
        </ItemTemplate>
    </asp:Repeater>

代码隐藏

    If Not Request.QueryString("State") = Nothing Then
        Dim cnn As New SqlConnection(MSSQL.cRemoteConnectionString)
        Dim cmd As New SqlDataAdapter("SELECT * FROM [Aust_Champions] WHERE (([FirstState] = '" & Request.QueryString("State") & "') OR ([SecondState] = '" & Request.QueryString("State") & "') OR ([ThirdState] = '" & Request.QueryString("State") & "')) ORDER BY [Season] DESC", cnn)
        Dim ds As New DataSet
        cmd.Fill(ds, "Aust_Champions")

        rptAustChampions.DataSource = ds.Tables("Aust_Champions")
        rptAustChampions.DataBind()
        cnn.Close()
    End If

非常感谢任何帮助!!

1 个答案:

答案 0 :(得分:0)

即使转发器在生成的html布局方面完全可自定义,我建议您切换到ListView控件,因为它为您提供了更多选项,并且您可能希望使用listview轻松实现大多数您想要做的事情。 / p>

还可以考虑在页面上添加SqlDataSource并使用QueryStringParameter。将ListView绑定到SqlDataSource。这样,asp.net将在使用查询字符串参数时处理安全性。

这也是恕我直言,但是:

当然有强烈意见(有很多理由)不使用html表。但是,当您拥有表级数据时,强烈建议您使用html表,因为它们是专门为此设计的。

因此,如果使用表格渲染数据就好了,请切换到GridView。在最简单的情况下,使用BoundField并使用ItemStyle属性。

如果表格不可用,请使用listview。使用标记的css类来设置单个单元格的样式。

对于转发器,您已完成布局,因此为了为每个单元格添加条件样式,您将更改此设置:

 <div class="DataTableCell"><%#DataBinder.Eval(Container.DataItem, "Track")%></div>

这样的事情:

 <div class='DataTableCell <%#DataBinder.Eval(Container.DataItem, "Season") == 1 ? "MyFirstClass" : "MySecondClass"%>'><%#DataBinder.Eval(Container.DataItem, "Track")%></div>

在样式表中定义相应的css classess。

您可能还希望不内联此逻辑并定义接受数据项的页面方法,并返回带有类名称的字符串:

  <div class='DataTableCell <%# GetCellClass(Container.DataItem) %>'><%#DataBinder.Eval(Container.DataItem, "Track")%></div>

在代码背后:

 string GetCellClass( object di)  {
    var  dataItem = di as (MyDataClass);

    if (dataItem.SomeProperty == "SomeValue") return "my-css-class";

    return string.Empty;

 }      
相关问题