将数据列表拆分为多个部分

发布于 2024-11-10 10:41:49 字数 292 浏览 5 评论 0 原文

在我的数据列表中,当发生不同的年份时,我想创建一个分隔符,将每个 ItemTemplate 与新的年份分开。

我使用以下方式选择数据:

MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM code_post", dbcon);

在该字段中,日期 表示其创建年份。例如2011年、2010年、2009年。

当发生不同的年份时,如何为新年划分标题?

Within my datalist, I want to create a separation dividing each ItemTemplate with a new year, when a different year occurs.

I select my data using:

MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM code_post", dbcon);

And within this field, a date denotes the year it was created. For instance 2011, 2010, 2009.

How can I make a heading of a new year division when a different year occurs?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小梨窩很甜 2024-11-17 10:41:49

截至目前,数据处于平面层次结构中,即类似于 List 的形式。您可以使用 Linq 或 for 循环将其放入 Dictionary> 中,其中字典键中的每个条目将是年份值,值将是该年份的数据对象列表年。您的转发器内部应该有一个转发器,然后将此 Dictionary 对象绑定到外部转发器,并且内部转发器数据源应该是 DataItem.Value (即绑定到外部转发器数据项的当前 KeyValue 对的 Value 部分)。

这不是您可以直接复制/粘贴的答案,但我希望您明白

As of now the data is in a flat hierarchy i.e something like List<DataObject>. You can use Linq or for-loops to make it in Dictionary<int,List<DataObject>> where each entry in the dictionary key will be year value and the Value will be List of Dataobject for that year. Than your repeater should have a repeater inside it and then bind this Dictionary object to the outer repeater and the inner repeater data source should be DataItem.Value (i.e the Value part of the current KeyValue pair which is bound to outer repeater data item).

This is not a answer will you can directly copy/paste but I hope you got the idea

氛圍 2024-11-17 10:41:49

我也遇到过这样的情况。

我所做的是......

我拿了一个中继器并从数据库中获取了DISTINCT Years。
获取一个 HiddenField 并将年份与 中的 DataList 一起保存在其中。

<asp:HiddenField ID="hfYear" runat="server" Value='<%#Eval("year")%>' />

然后使用 Repeater 的 ItemDataBound,我首先搜索 DataListHiddenField 并将该 DataList 与另一种方法绑定从 HiddenField 传递年份。

OnitemDataBound的使用

if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
    HiddenField hf = (HiddenField)e.Item.FindControl("hfYear");
    DataList dl = (DataList)e.Item.FindControl("yourDataListID");
    yourDataListBindMethod(hf.Value);
}

唯一的缺点是对数据库有多次往返(不同年份的数量=对数据库的旅行次数)。

I too had an encounter with such a situation.

What i did was...

I took a repeater and fetched the DISTINCT Years from the database.
Take a HiddenField and save the year inside like this along with the DataList inside your <ItemTemplate>.

<asp:HiddenField ID="hfYear" runat="server" Value='<%#Eval("year")%>' />

Then using the Repeater's ItemDataBound, i first searched for the DataList and HiddenField and binded that DataList with another method by passing the year from the HiddenField.

OnitemDataBound use

if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
    HiddenField hf = (HiddenField)e.Item.FindControl("hfYear");
    DataList dl = (DataList)e.Item.FindControl("yourDataListID");
    yourDataListBindMethod(hf.Value);
}

The only drawback in this is that there are multiple round trips to the database(number of distinct years=number of trips to database).

凉栀 2024-11-17 10:41:49

我解决这个问题的方法是通过一次数据库访问,并

private String previousYear;
public string outputHeader(object y){
  String year = y.ToString();
   if(!previousYear.equals(year)){
      previousYear = year;
      return year;
   }
   return "";
}

在我所做的项目模板中包含诸如 和 之

<%# outputHeader(Eval("date")) %>

类的代码。这允许一次访问数据库,并且比之前建议的方法更加高效/灵活

The way I solved this was by making one trip to the database, and having the code such as

private String previousYear;
public string outputHeader(object y){
  String year = y.ToString();
   if(!previousYear.equals(year)){
      previousYear = year;
      return year;
   }
   return "";
}

and inside the item template i did

<%# outputHeader(Eval("date")) %>

This allows for one trip to the DB, and is far more efficent/flexible than the previously suggest methods

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文