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

C# 如何使用Repeater从对象列表中输出字符串,c#,.net,list,data-binding,repeater,C#,.net,List,Data Binding,Repeater,我不确定这是否是最好的方法,但我正在尝试使用repeater控件显示一些搜索结果。查询写在代码隐藏页中,我不知道如何将结果绑定到控件。到目前为止,我已经创建了一个saleItem对象列表,saleItem对象包含我想在repeater中显示的字符串 Search.aspx.cs List<SaleItem> resultsList = new List<SaleItem>(); SqlDataReader reader = doMainQuery.ExecuteRe

我不确定这是否是最好的方法,但我正在尝试使用repeater控件显示一些搜索结果。查询写在代码隐藏页中,我不知道如何将结果绑定到控件。到目前为止,我已经创建了一个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();
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>

//resultsList.SaleItem.getTitle()?

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

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>
公共类SaleItem
{    
公共字符串saleTitle{get;set;}
}
公共静态类扩展
{
公共静态IEnumerable选择(此SqlDataReader,Func投影)
{
while(reader.Read())
{
收益率预测(阅读器);
}
}
}
列表结果列表=新列表();
SqlDataReader=doMainQuery.ExecuteReader();
var resultsList=reader.Select(x=>newsaleItem{saleTitle=x[“saleTitle”].ToString()}).Distinct().ToList();
showResults.DataSource=resultsList;
showResults.DataBind();

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

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>
公共类SaleItem
{    
公共字符串saleTitle{get;set;}
}
公共静态类扩展
{
公共静态IEnumerable选择(此SqlDataReader,Func投影)
{
while(reader.Read())
{
收益率预测(阅读器);
}
}
}
列表结果列表=新列表();
SqlDataReader=doMainQuery.ExecuteReader();
var resultsList=reader.Select(x=>newsaleItem{saleTitle=x[“saleTitle”].ToString()}).Distinct().ToList();
showResults.DataSource=resultsList;
showResults.DataBind();

谢谢@Peyman,尽管我忘了提到我将使用while循环删除由SQLstatement中的联接引起的所有返回的重复行,如果saleId与前一行不同,只创建saleItem对象并将其添加到列表中。有没有办法解决这个问题?@Slartybartfast,您可以使用distinct删除任何重复的数据hi@Peyman我尝试将var resultsList重命名为var resultsList2,运行时我得到的源不是IEnumerable异常?我对你的代码很困惑,你能解释一下var结果列表行上发生了什么吗。。。谢谢@Slartybartfast,我修改了代码,并进行了测试。感谢@Peyman,尽管我忘了提到我将使用while循环删除由SQLstatement中的联接引起的所有返回的重复行,只要创建saleItem对象并将其添加到列表中(如果saleId与前一行不同)。有没有办法解决这个问题?@Slartybartfast,您可以使用distinct删除任何重复的数据hi@Peyman我尝试将var resultsList重命名为var resultsList2,运行时我得到的源不是IEnumerable异常?我对你的代码很困惑,你能解释一下var结果列表行上发生了什么吗。。。谢谢@Slartybartfast,我修改了代码,并进行了测试。它起作用了。