首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ASP日历未显示前一个月和下个月的数据

ASP日历未显示前一个月和下个月的数据
EN

Stack Overflow用户
提问于 2018-08-29 04:16:17
回答 2查看 1.7K关注 0票数 7

我有一个ASP日历页,它从数据库中提取事件列表。我遇到的问题是,当我单击下一个月和前一个月时,显示的是当前月份的数据,而不是前一个月和下一个月的数据。单击不同月份时,ASP Calendar是否重新加载整个页面,还是充当查询字符串属性?

下面是我目前正在使用的代码:

代码语言:javascript
运行
AI代码解释
复制
protected DataSet dsEvents;

protected void Page_Load(object sender, EventArgs e)
{
    Calendar1.FirstDayOfWeek = FirstDayOfWeek.Sunday;
    Calendar1.NextPrevFormat = NextPrevFormat.FullMonth;
    Calendar1.TitleFormat = TitleFormat.Month;
    Calendar1.ShowGridLines = true;
    Calendar1.DayStyle.HorizontalAlign = HorizontalAlign.Left;
    Calendar1.DayStyle.VerticalAlign = VerticalAlign.Top;
    Calendar1.OtherMonthDayStyle.BackColor = System.Drawing.Color.LightGray;

    Calendar1.VisibleDate = DateTime.Today;
    FillEventDataset();
    GetFirstDayOfNextMonth();

    if (!IsPostBack)
    {
        Calendar1.VisibleDate = DateTime.Today;
        FillEventDataset();
        GetFirstDayOfNextMonth();
    }
}

protected DateTime GetFirstDayOfNextMonth()
{
    int monthNumber, yearNumber;
    if (Calendar1.VisibleDate.Month == 12)
    {
        monthNumber = 1;
        yearNumber = Calendar1.VisibleDate.Year + 1;
    }
    else
    {
        monthNumber = Calendar1.VisibleDate.Month + 1;
        yearNumber = Calendar1.VisibleDate.Year;
    }
    DateTime lastDate = new DateTime(yearNumber, monthNumber, 1);
    return lastDate;
}

protected void FillEventDataset()
{
    DateTime firstDate = new DateTime(Calendar1.VisibleDate.Year, Calendar1.VisibleDate.Month, 1);
    DateTime lastDate = GetFirstDayOfNextMonth();
    dsEvents = GetSelectedMonthData(firstDate, lastDate);
}

protected DataSet GetSelectedMonthData(DateTime firstDate, DateTime lastDate)
{
    DataSet dsMonth = new DataSet();

    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        SqlCommand comm = new SqlCommand("SELECT EventDate, EventLocation, EventSubject, EventStart FROM EventList WHERE EventDate >= @FirstDate AND EventDate <= @LastDate", conn);

        comm.CommandType = CommandType.Text;
        comm.Parameters.AddWithValue("@FirstDate", firstDate);
        comm.Parameters.AddWithValue("@LastDate", lastDate);

        conn.Open();
        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(comm);
        try
        {
            sqlDataAdapter.Fill(dsMonth);
        }
        finally
        {
            conn.Close();
        }
    }
    return dsMonth;
}

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
    e.Day.IsSelectable = false;
    e.Cell.ForeColor = System.Drawing.Color.Black;
    if (e.Day.IsOtherMonth)
    {
        e.Cell.Visible = true;
        e.Cell.Text = "";
    }

    DateTime nextEvent;
    String nextLocation;
    String nextSubject;
    String nextStart;

    if (dsEvents != null)
    {
        foreach (DataRow dr in dsEvents.Tables[0].Rows)
        {

            nextEvent = (DateTime)dr["EventDate"];
            nextLocation = dr["EventLocation"].ToString();
            nextSubject = dr["EventSubject"].ToString();
            nextStart = dr["EventStart"].ToString();

            if (nextEvent == e.Day.Date)
            {
                Literal literal1 = new Literal();
                literal1.Text = "<br/>";
                e.Cell.Controls.Add(literal1);

                Label label1 = new Label();
                label1.Text = nextStart.ToString();
                label1.Font.Size = new FontUnit(FontSize.Small);
                e.Cell.Controls.Add(label1);

                Literal literal2 = new Literal();
                literal2.Text = "&nbsp;&nbsp;";
                e.Cell.Controls.Add(literal2);

                Label label2 = new Label();
                label2.Text = nextSubject.ToString();
                label2.Font.Size = new FontUnit(FontSize.Small);
                e.Cell.Controls.Add(label2);

                Literal literal3 = new Literal();
                literal3.Text = "&nbsp;&nbsp;";
                e.Cell.Controls.Add(literal3);

                Label label3 = new Label();
                label3.Text = nextLocation.ToString();
                label3.Font.Size = new FontUnit(FontSize.Small);
                e.Cell.Controls.Add(label3);
            }

        }
    }
}

protected void Calendar1_VisibleMonthChanged(object sender, MonthChangedEventArgs e)
{
    GetFirstDayOfNextMonth();
    FillEventDataset();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-31 07:03:02

我测试了你的全部代码。效果很好。但是在开始加载时,它会执行代码两次。

代码语言:javascript
运行
AI代码解释
复制
//remove these two lines
FillEventDataset();
GetFirstDayOfNextMonth();

if (!IsPostBack)
{
    Calendar1.VisibleDate = DateTime.Today;
    FillEventDataset();
    GetFirstDayOfNextMonth();
}

若要查看是否使用了正确的月份,请将此行添加到GetSelectedMonthData方法中。

代码语言:javascript
运行
AI代码解释
复制
Label1.Text = firstDate.ToLongDateString() + " - " + lastDate.ToLongDateString();

如果显示的月份是正确的,则数据库中的日期很可能会出现问题。但为了确保..。您是否将事件添加到Calendar控件?

代码语言:javascript
运行
AI代码解释
复制
<asp:Calendar ID="Calendar1" runat="server" OnDayRender="Calendar1_DayRender"
  OnVisibleMonthChanged="Calendar1_VisibleMonthChanged"></asp:Calendar>

更确切地说,最好将AddWithValue更改为

代码语言:javascript
运行
AI代码解释
复制
comm.Parameters.Add("@FirstDate", SqlDbType.DateTime).Value = firstDate;
comm.Parameters.Add("@LastDate", SqlDbType.DateTime).Value = lastDate;
票数 4
EN

Stack Overflow用户

发布于 2021-03-03 01:53:49

单击不同月份时,ASP Calendar是否重新加载整个页面,还是充当查询字符串属性?

是的,问题是回发,你无法避免。

因为我有几个日历,所以我把它写得很一般。

Foo.aspx

代码语言:javascript
运行
AI代码解释
复制
  <asp:Calendar ID="cal1" runat="server" OnVisibleMonthChanged="cal_VisibleMonthChanged" [...]/>

  <asp:Calendar ID="cal2" runat="server" OnVisibleMonthChanged="cal_VisibleMonthChanged" [...]/>

  <asp:Calendar ID="cal3" runat="server" OnVisibleMonthChanged="cal_VisibleMonthChanged" [...]/>

Foo.aspx.cs

代码语言:javascript
运行
AI代码解释
复制
protected void cal_VisibleMonthChanged(object sender, MonthChangedEventArgs e)
{
    ((Calendar)sender).Visible = true;
}

这篇文章(对我) https://stackoverflow.com/a/25750717/15274506很有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52077271

复制
相关文章
Python-科学计算-pandas-03-两列相乘
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2
zishendianxia
2019/11/18
7.2K0
Python-科学计算-pandas-02-两列相减
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2
zishendianxia
2019/10/30
21.6K0
Python-科学计算-pandas-02-两列相减
使用Pandas返回每个个体/记录中属性为1的列标签集合
前几天在J哥的Python群【Z】问了一个Pandas数据处理的问题,一起来看看吧。
Python进阶者
2023/08/31
2320
使用Pandas返回每个个体/记录中属性为1的列标签集合
pandas’_pandas 删除列
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/02
2.7K0
pandas’_pandas 删除列
Python pandas按列拆分Excel为多个文件
还是用循环数据的方法来进行逐行判断并进行组合,再拆分。总是感觉与VBA的差别不大,Python的强大功能没能体现出来。今天终于学习到了。
哆哆Excel
2022/10/25
3.3K0
Python pandas按列拆分Excel为多个文件
Excel与pandas:使用applymap()创建复杂的计算列
我们之前讨论了如何在pandas中创建计算列,并讲解了一些简单的示例。通过将表达式赋值给一个新列(例如df['new column']=expression),可以在大多数情况下轻松创建计算列。然而,有时我们需要创建相当复杂的计算列,这就是本文要讲解的内容。
fanjy
2022/11/16
4K0
Excel与pandas:使用applymap()创建复杂的计算列
pandas新版本增强功能,数据表多列频率统计
pandas 在1.0版本发布后,更新频率非常高,今天我们看看关于频率统计的一个新方法。
咋咋
2021/09/01
1.6K0
pandas新版本增强功能,数据表多列频率统计
Pandas中求某一列中每个列表的平均值
前几天在Python最强王者交流群【冫马讠成】问了一道Pandas处理的问题,如下图所示。
前端皮皮
2022/08/17
5K0
Pandas中求某一列中每个列表的平均值
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
前几天在Python星耀交流群有个叫【在下不才】的粉丝问了一个Pandas的问题,按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值,这里拿出来给大家分享下,一起学习。
前端皮皮
2022/08/17
3.1K0
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
Pandas 查找,丢弃列值唯一的列
数据清洗很重要,本文演示如何使用 Python Pandas 来查找和丢弃 DataFrame 中列值唯一的列,简言之,就是某列的数值除空值外,全都是一样的,比如:全0,全1,或者全部都是一样的字符串如:已支付,已支付,已支付…
萝 卜
2022/05/12
5.9K0
Pandas 查找,丢弃列值唯一的列
Python-科学计算-pandas-23-按列去重
系统:Windows 10 编辑器:JetBrains PyCharm Community Edition 2018.2.2 x64 pandas:1.1.5
zishendianxia
2022/02/23
1.3K0
Python-科学计算-pandas-23-按列去重
Python-科学计算-pandas-22-按某列排序
系统:Windows 10 编辑器:JetBrains PyCharm Community Edition 2018.2.2 x64 pandas:1.1.5
zishendianxia
2021/09/29
1.5K0
pandas基础:重命名pandas数据框架列
重命名pandas数据框架列有很多原因。例如,可能希望列名更具描述性,或者可能希望缩短名称。本文将介绍如何更改数据框架中的名称。
fanjy
2022/11/16
1.9K0
pandas基础:重命名pandas数据框架列
Pandas | 如何新增数据列?
在数据分析时,原始数据往往不能满足我们的需求,经常需要按照一定条件创建新的数据列或者修改原有数据列,然后进行后续分析。
生信real
2022/12/20
2.1K0
Python-科学计算-pandas-13-列名/删除列/替换nan
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2 pandas:0.19.2
zishendianxia
2020/09/15
2.1K0
Pandas基础:如何计算两行数值之差
有时候,我们想要计算数据框架中行之间的差,可以使用dataframe.diff()方法,而不遍历行。
fanjy
2022/06/04
4.8K0
Pandas基础:如何计算两行数值之差
Pandas基础:在Pandas数据框架中移动列
有时候,我们需要在pandas数据框架内移动一列,shift()方法提供了一种方便的方法来实现。
fanjy
2022/06/04
3.3K0
Pandas基础:在Pandas数据框架中移动列
Pandas基础:列方向分组变形
但是我发现大部分人在做这个题的时候,代码写的异常复杂。所以我建议你也不要直接看我的代码,而是先思考一下,你会怎么解决这个问题。
朱小五
2021/02/22
1.4K0
Pandas基础:列方向分组变形
Python-科学计算-pandas-11-df获取特定行或者列
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2 pandas:0.19.2
zishendianxia
2020/06/16
2.1K0
点击加载更多

相似问题

计算DataFrameGroupBy对象列(pandas)的频率

30

用Pandas总结跨两列的频率

14

Pandas -计算期望频率表

149

计算每个单词的频率

24

如何计算R中每个列值的频率组合?

117
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档