ASP repeater - Conditional alternate itemtemplate
Hejsa.Jeg benytter en Asp:Repeater på en ASP.NET side med henholdsvis en ItemTemplate og en Alternate ItemTemplate, der udskriver tabel-rækker i henholdsvis hvid og grå farvet baggrund.
Dette fungerer fint, men min plan var at benytte det på en blog jeg er ved at lave - http://www.winfrastructure.dk/blog/ og her ville jeg gerne have, at de svar/kommentarer jeg selv går ind og skriver som svar på andres kommentarer til en artikel, bliver vist med en anden farve baggrund end den hvide eller grå baggrund.
Selve repeater er lavet på denne måde:
<asp:Repeater ID="repeater_Comments" runat="server">
<HeaderTemplate><table class="blogCommentTable"></HeaderTemplate>
<ItemTemplate>
<tr>
<td class="tdCommentName1"><%#DataBinder.Eval(Container.DataItem, "Name")%></td>
<td class="tdCommentDate1"><%#DataBinder.Eval(Container.DataItem, "Date")%></td>
</tr>
<tr>
<td class="tdComment1" colspan="2"><%#DataBinder.Eval(Container.DataItem, "Comment")%></td>
</tr>
<tr>
<td class="tdCommentSpacer" colspan="2" style="padding: 0"> </td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr>
<td class="tdCommentName2"><%#DataBinder.Eval(Container.DataItem, "Name")%></td>
<td class="tdCommentDate2"><%#DataBinder.Eval(Container.DataItem, "Date")%></td>
</tr>
<tr>
<td class="tdComment2" colspan="2"><%#DataBinder.Eval(Container.DataItem, "Comment")%></td>
</tr>
<tr>
<td class="tdCommentSpacer" colspan="2" style="padding: 0"> </td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate></table></FooterTemplate>
</asp:Repeater>
Og metoden, der kaldes der genererer repeateren er skrevet på denne måde:
protected void DisplayComments()
{
// Hent alle kommentarer til dette blog-indlæg
List<BlogEntryComment> commentList = BlogEntriesDB.GetComments(this.blogEntry.Id);
if (commentList.Count > 0)
{
this.repeater_Comments.DataSource = commentList;
this.repeater_Comments.DataBind();
}
else
{
this.header_Comments.Visible = false;
}
}
Repeateren databindes til en <List> i en metode der ser ud som:
[DataObjectMethod(DataObjectMethodType.Select)]
public static List<BlogEntryComment> GetComments()
{
List<BlogEntryComment> blogCommentList = new List<BlogEntryComment>();
IDbConnection connection = null;
IDbCommand command = null;
// Opret databaseadgang
connection = DBFactory.GetDbConnection();
command = connection.CreateCommand();
command.CommandText = "SELECT Blog_Comments.Id, Blog_Comments.Date, Blog_Comments.Name, Blog_Comments.Comment, Blog_Comments.Admin, Blog_BlogEntries.Header";
command.CommandText += " FROM Blog_Comments INNER JOIN Blog_BlogEntries ON Blog_Comments.BlogEntryId = Blog_BlogEntries.Id ORDER BY Blog_Comments.Id DESC";
command.Connection.Open();
BlogEntryComment blogEntryComment = null;
IDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
{
blogEntryComment = new BlogEntryComment();
blogEntryComment.Id = (int)reader["Id"];
blogEntryComment.Date = (string)reader["Date"].ToString().Substring(0, 10);
blogEntryComment.Name = (string)reader["Name"];
blogEntryComment.Comment = (string)reader["Comment"];
blogEntryComment.Admin = Convert.ToBoolean(reader["Admin"]);
blogEntryComment.Header = (string)reader["Header"];
blogCommentList.Add(blogEntryComment);
}
reader.Close();
if (connection.State == ConnectionState.Open)
command.Connection.Close();
return blogCommentList;
}
Da jeg allerede benytter en Alternate ItemTemplate, og heller ikke er klar over hvordan jeg i givet fald ville kune sætte en alternativ farve programmeringsmæssigt, er mit spørgsmål nu.
Hvordan vil jeg ud fra om en blogEntryComment, der er den objekt-type, der er i listen, der returneres til repeateren, har en Admin property der er true kunne lave endnu en alternativ farve i listen over kommentarer?
'Admin' sættes kun til true, hvis kommentaren er skrevet fra et administrativt site belligende bagved selve hjemmesiden og hvis denne er sat til true vil jeg gerne have at tabel-rækken er fx. gul eller orange...
Håber der er én der kan give en pointer i den rigtige retning.