我试图在中继器中合并数据,以便所有具有相同"项目名称"的配置文件和时间都列在项目下。目前,数据显示为:
9:30项目名称
配置文件1
9:30项目名称
配置文件2
,但我的目的是显示数据为:
9:30项目名称
配置文件1
配置文件2
链接到HTML当前如何布置
aspx文件:
<asp:Repeater ID="rptAgenda" runat="server">
<ItemTemplate>
<div class="agenda_card"/>
<div class="time"><%#Eval("valuefield")%></div>
<div class="title"><%#Eval("Product")%></div>
<%#Eval("details")%>
<a href="#" class="profile_outer">
<div style="background-image:url('<%#"/photo/" + Eval("photo").ToString()%>');" ></div>
<%# Eval("type") %></br><b><%#Eval("Name")%> <%#Eval("lastname")%>, <%#Eval("jobtitle")%>
><%#Eval("subcompany")%>, <%#Eval("country")%>
</div>
</ItemTemplate>
</asp:Repeater>
c#文件:
public partial class agenda_code : System.Web.UI.Page
{
OleDbCommand cmd;
OleDbConnection con;
protected void Page_Load(object sender, EventArgs e)
{
string dbPath = Server.MapPath("~") + "\Database\maindb.accdb";
con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbPath + ";Persist Security Info=False;");
fillAgenda();
}
private void fillAgenda()
{
string query = "Select listRecipients.valuefield, listRecipients.Product, listRecipients.type, listRecipients.details, Subscribers.Name, Subscribers.lastname, Subscribers.jobtitle, Subscribers.subcompany, Subscribers.country, Subscribers.photo, Subscribers.ContactBio FROM listRecipients ";
query += "LEFT JOIN Subscribers ON listRecipients.idEmail=Subscribers.idEmail ";
query += "Where idList=2830 AND (type <> 'Delegate' AND type <>'Sponsor') order by valuefield";
OleDbDataAdapter adp = new OleDbDataAdapter(query, con);
System.Data.DataSet ds = new System.Data.DataSet();
adp.Fill(ds);
rptAgenda.DataSource = ds;
rptAgenda.DataBind();
}
}
希望我不会太模糊,但是任何回应都将不胜感激:(
我将在以下完成。
- 创建模型
- 致电数据库,返回
IEnumerable<Model>
- 然后我将过滤数据收集
- 将过滤的内容物绑定到中继器
本质上,您将有一个简单的对象,未过滤结果集将返回。然后使用linq对您想实现的任何东西进行消毒,分组或任何您想实现的目标。
var collection = dbContext.GetSample();
var filter = collection.Where(sample => sample.Item == "Data");
rptSample.DataSource = filter;
rptSample.Bind();
您需要使用适当的LINQ查询来达到数据结果。但是,您可以通过数据库中的更好数据集来实现此目标。然后,您可以简单地绑定,但是如果没有对数据的结构或理解,那将是我推荐的两种方法。
更新:
您将创建一个与您的业务逻辑有关的对象。
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
因此,您将从数据库中提取模型。我已经抽象了这一点,以反映数据库调用。但这就是所有逻辑正在做的。
public IEnumerable<Product> GetAllProducts()
{
using(var context = factory.Create())
yield return context.RetrieveAllProducts();
}
因此,我们在类中有一种方法来检索我们的产品。在页面加载中,您将执行以下操作:
var products = productService.GetAllProducts().Where(product => product.Name.Contains("box"));
请注意,包含不理想的情况并不理想,但这是一个例子。因此,我已经打电话给我们所有的产品,只想要包含框的名称的产品。所以,现在我将这些控制权。
rptProducts.DataSource = products;
rptProducts.DataBind();
因此,模型代表我们的对象,我们使用控件将所需的内容反映给我们的页面。这有一些好处,主要是您有一个模型来反映您的业务逻辑。您还会收到能够将对象拉一次,然后缓存,然后在其他地方使用的好处。存在缺点,但是您经常可以克服,只需要找到适合您应用的适当用法即可。