如何使用Repeater从对象列表中输出字符串

本文关键字:输出 字符串 列表 对象 何使用 Repeater | 更新日期: 2023-09-27 18:04:26

我不确定这是否是最好的方法,但我试图使用重复器控件显示一些搜索结果。查询是在页面后面的代码中编写的,我不知道如何将结果绑定到控件。到目前为止,我已经创建了一个saleItem对象列表,saleItem对象包含我想在repeater中显示的字符串。

Search.aspx.cs

List<SaleItem> resultsList = new List<SaleItem>();
  SqlDataReader reader = doMainQuery.ExecuteReader();
  while (reader.Read())
  {
    SaleItem newItem = new SaleItem((string)reader["saleTitle"]);
    resultsList.Add(newItem);
  }
  showResults.DataSource = resultsList;
  showResults.DataBind();

SaleItem.cs

public class SaleItem
{
    private String connectionString;
    public string saleTitle;
    public SaleItem(string s)
    {
        saleTitle = s;
    }
    public string  getTitle()
    {
        return saleTitle;
    }
}

搜索。aspx

我希望能够以类似的方式显示标题,有什么想法吗?

<asp:repeater
        id="showResults"  
        Runat="server"   >
        <ItemTemplate>
        <%# Eval("saleTitle")%></ItemTemplate> // resultsList.SaleItem.getTitle()?
        </asp:repeater>

如何使用Repeater从对象列表中输出字符串

您可以按照以下方式重构代码

public class SaleItem
{    
    public string saleTitle {get;set;}   
}
public static class Extension
{
    public static IEnumerable<T> Select<T>(this SqlDataReader reader, Func<SqlDataReader, T> projection)
    {
        while (reader.Read())
        {
            yield return projection(reader);
        }
    }
}
List<SaleItem> resultsList = new List<SaleItem>();
SqlDataReader reader = doMainQuery.ExecuteReader();
var resultsList = reader.Select(x => new SaleItem { saleTitle = x["saleTitle"].ToString() }).Distinct().ToList();
showResults.DataSource = resultsList;
showResults.DataBind();

<asp:repeater id="showResults" Runat="server"   >
    <ItemTemplate>
      <%# Eval("saleTitle")%>
    </ItemTemplate>
</asp:repeater>