C# 如何使用Repeater从对象列表中输出字符串
我不确定这是否是最好的方法,但我正在尝试使用repeater控件显示一些搜索结果。查询写在代码隐藏页中,我不知道如何将结果绑定到控件。到目前为止,我已经创建了一个saleItem对象列表,saleItem对象包含我想在repeater中显示的字符串 Search.aspx.csC# 如何使用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
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,我修改了代码,并进行了测试。它起作用了。