我在查找如何在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
非常感谢任何帮助!!
答案 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;
}