gpt4 book ai didi

ASP.NET 按月分组数据

转载 作者:行者123 更新时间:2023-12-02 10:24:49 25 4
gpt4 key购买 nike

我希望使用可折叠的 DIV 按月对一些数据进行分组(存储在 SQL 数据库中),毫无疑问是使用 jQuery。我并不是特别想使用 GridView,因为在编写 jQuery 时为了简单起见,我希望远离表格。

在 ASP.NET 中执行此操作的最佳方法是什么?我将使用哪个控件?

请参阅以下示例,了解我试图描述的内容:

Grouping Example

最佳答案

我创建了一个项目,它使用嵌套转发器按月显示数据,它已上传到 Google Docs (只需单击"file"->“保存”即可下载 .zip)。

以下是其工作原理的简要概述:

假设数据库中有一个简单的 Orders 表,其中包含以下列

  1. 订单ID
  2. 产品
  3. 数量
  4. 销售日期

流程

  1. 执行存储过程来获取给定年份的月份(我使用了 EntityFramework 函数,您可以将其更改为 ADO.NET、LINQ 等)
  2. 将返回的月份绑定(bind)到主中继器中的标签(这些将是您的标题)
  3. 处理主中继器的 OnItemDataBound 事件,每次将项目绑定(bind)到中继器时都会运行此事件
  4. OnItemDataBound内部执行一个存储过程来获取特定月份和年份的所有记录,并将返回的数据简单地绑定(bind)到子中继器
  5. 添加一些 jQuery 来显示和隐藏 div,就可以了。

代码

存储过程:

CREATE PROCEDURE dbo.GetMonthsByYear
@Year INT
AS
BEGIN
SELECT DISTINCT DATENAME(Month,DateOfSale) AS [Month] FROM Orders
WHERE Year(DateOfSale) = @Year
END

CREATE PROCEDURE dbo.GetOrdersByMonth
@Month NVARCHAR(15),
@Year INT
AS
BEGIN
SELECT * FROM Orders
WHERE (Year(DateOfSale) = @Year) AND DATENAME(MONTH,DateOfSale) = @Month
END

ASPX:

<head runat="server">
<script src="Scripts/jquery-1.7.1.js" type="text/javascript"></script>
<script type="text/javascript">
var showHide;
$(document).ready(function () {
showHide = function (control) {
var parent = $(control).next();
var display = parent.css('display');
if (display == "none") { parent.fadeIn('slow'); }
else { parent.fadeOut('slow'); }

};
});
</script>
<style type="text/css">
.detail
{
height:300px;
display:none;
width: 100%;
border: 1px solid black;
}

.header
{
vertical-align: top;
padding: 3px;
height: 30px;
background: black;
color: White;
font-weight: bold;
}
</style>
<title>Nested Repeater</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Select year:&nbsp;<asp:TextBox ID="txtYear" runat="server" /><br />
<asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="Search" /><br />
<asp:Repeater ID="masterRepeater" runat="server" OnItemDataBound="ItemDataBound">
<ItemTemplate>
<div id='<%# Container.DataItem %>' class="header" onclick="showHide(this);">
<asp:Label ID="lblMonth" runat="server" Text='<%# Container.DataItem %>' />
</div>
<div class="detail">
<asp:Repeater ID="detailRepeater" runat="server">
<HeaderTemplate>
<span style="text-decoration: underline">Product</span><br />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Bind("Product") %>' />
<asp:Label ID="lblQuantity" runat="server" Text='<%# Bind("Quantity") %>' />
<asp:Label ID="lblDateOfSale" runat="server" Text='<%# Bind("DateOfSale") %>' /><br />
</ItemTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
</form>
</body>

隐藏代码:

protected void Search(object sender, EventArgs e)
{
int year = 0;
if (Int32.TryParse(txtYear.Text, out year))
{
orderEntities orders = new orderEntities();
List<string> months = orders.GetMonthByYear(year).ToList();
masterRepeater.DataSource = months;
masterRepeater.DataBind();
}
}

protected void ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
int year = 0;
if (Int32.TryParse(txtYear.Text, out year))
{
Label lblMonth = e.Item.FindControl("lblMonth") as Label;
if (lblMonth != null)
{
string month = lblMonth.Text;
Repeater detailRepeater = e.Item.FindControl("detailRepeater") as Repeater;
if (detailRepeater != null)
{
orderEntities orders = new orderEntities();
var ordersByMonth = orders.GetOrdersByMonth(month, year).ToList();
detailRepeater.DataSource = ordersByMonth;
detailRepeater.DataBind();
}
}
}
}
}

结果:

enter image description here

关于ASP.NET 按月分组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14427936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com