我正在尝试合并转发器中的数据,以便所有具有相同“项目名称”和时间的配置文件一次性列在该项目下。 目前,数据显示如下:
9:30项目名称
个人资料1
9:30项目名称
个人资料2
但我的目标是将数据显示为:
9:30项目名称
个人资料1
个人资料2
Link to how the html is currently laid out
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#FILE:
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();
}
}
希望我不会太模糊,但任何回应都会非常感激:)
答案 0 :(得分:0)
我会在下面完成。
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"));
请注意,contains不区分大小写,不是理想的,但这是一个示例。所以,我打电话给我们所有的产品,只想要一个名字包含盒子的产品。所以,现在我将它们放入一个控件中。
rptProducts.DataSource = products;
rptProducts.DataBind();
因此模型代表我们的对象,我们使用控件将所需内容反映到我们的页面。这有一些好处,主要是您有一个模型来反映您的业务逻辑。您还可以获得一次拉动对象,然后缓存,然后在其他地方使用的好处。缺点确实存在,但您经常可以克服,只需找到适合您应用的正确用法。