Как вывести строки из списка объектов, используя Repeater - PullRequest
1 голос
/ 02 августа 2011

Я не уверен, что это лучший способ сделать это, но я пытаюсь показать некоторые результаты поиска, используя элемент управления повторителя. Запрос написан в коде позади страницы, и я не могу понять, как привязать результаты к элементу управления. Пока что я создал список объектов saleItem, объект saleItem содержит строку, которую я хочу показать в повторителе.

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;
    }
}

Search.aspx

Я хотел бы иметь возможность показывать заголовок аналогично этому, какие-либо идеи?

<asp:repeater
        id="showResults"  

        Runat="server"   >

        <ItemTemplate>
        <%# Eval("saleTitle")%></ItemTemplate> // resultsList.SaleItem.getTitle()?
        </asp:repeater>

1 Ответ

1 голос
/ 02 августа 2011

Вы можете изменить свой код следующим образом

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>
...