【问题标题】:How to change the data in Telerik's RadGrid based on Calendar's selected dates?如何根据日历的选定日期更改 Telerik 的 RadGrid 中的数据?
【发布时间】:2010-02-24 07:14:06
【问题描述】:

我正在使用 Telerik 的 RadGrid 和日历创建另一个用户控件。

<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<table class="style1">
    <tr>
        <td>From</td>
        <td>To</td>
    </tr>
    <tr>
        <td><asp:Calendar ID="Calendar1" runat="server" SelectionMode="Day"></asp:Calendar></td>
        <td><asp:Calendar ID="Calendar2" runat="server" SelectionMode="Day"></asp:Calendar></td>
    </tr>
    <tr>
        <td><asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" /></td>
        <td><asp:Button ID="btnClear" runat="server" Text="Clear" OnClick="btnClear_Click" /></td>
    </tr>
</table>
<telerik:RadGrid ID="RadGrid1" runat="server">
    <MasterTableView CommandItemDisplay="Top"></MasterTableView>
</telerik:RadGrid>

我在代码隐藏中使用 Linq:

    Entities1 entities = new Entities1();

    public static object DataSource = null;

    protected void Page_Load(object sender, EventArgs e) {
        if (DataSource == null) {
            DataSource = (from entity in entities.nsc_moneytransaction
                          select new {
                              date = entity.transaction_date.Value,
                              username = entity.username,
                              cashbalance = entity.cash_balance
                          }).OrderByDescending(a => a.date);
        }
        BindData();
    }

    public void BindData() {
        RadGrid1.DataSource = DataSource;
    }

    protected void btnSubmit_Click(object sender, EventArgs e) {
        DateTime startdate = new DateTime();
        DateTime enddatedate = new DateTime();
        if (Calendar1.SelectedDate != null && Calendar2.SelectedDate != null) {
            startdate = Calendar1.SelectedDate;
            enddatedate = Calendar2.SelectedDate;
            var queryDateRange = from entity in entities.nsc_moneytransaction
                                 where DateTime.Parse(entity.transaction_date.Value.ToShortDateString())
                                        >= DateTime.Parse(startdate.ToShortDateString())
                                    && DateTime.Parse(entity.transaction_date.Value.ToShortDateString()) 
                                        <= DateTime.Parse(enddatedate.ToShortDateString())
                                 select new {
                                     date = entity.transaction_date.Value,
                                     username = entity.username,
                                     cashbalance = entity.cash_balance
                                 };
            DataSource = queryDateRange.OrderByDescending(a => a.date);
        } else if (Calendar1.SelectedDate != null) {
            startdate = Calendar1.SelectedDate;
            var querySetDate = from entity in entities.nsc_moneytransaction
                               where entity.transaction_date.Value == startdate
                               select new {
                                   date = entity.transaction_date.Value,
                                   username = entity.username,
                                   cashbalance = entity.cash_balance
                               };
            DataSource = querySetDate.OrderByDescending(a => a.date); ;
        }
        BindData();
    }

    protected void btnClear_Click(object sender, EventArgs e) {
        Calendar1.SelectedDates.Clear();
        Calendar2.SelectedDates.Clear();
    }

问题是,(1)当我点击提交按钮时。 RadGrid 中的数据没有改变。 (2) 我们如何检查日历控件中是否没有选择任何内容,因为即使我们没有从该日历中选择任何内容,也设置了一个日期 (01/01/0001),因此 Calendar1.SelectedDate != null 是不够的。 =(

谢谢。

【问题讨论】:

    标签: asp.net calendar telerik radgrid


    【解决方案1】:

    当您将新数据源绑定到网格控件时,您需要调用Rebind 以使网格显示新数据。或者,您可以使用 NeedDataSource 事件(我认为更优雅的解决方案)

    对于您的第二个问题,试试这个(假设您使用的是 ASP.NET 日历而不是 Telerik DatePicker:

    if(Calendar1.SelectedDate.Date == DateTime.MinValue) {
        //no date selected
    } else {
        //date is selected
    }
    

    【讨论】:

    • 我不熟悉这些功能。 =(
    • 只需在您的BindData 方法中的RadGrid1.DataSource = DataSource; 之后添加RadGrid1.Rebind();
    • 我更新了我的答案以(希望)回答你的第二个问题
    • 嗯,我尝试了你的第二个问题的解决方案,但我只是觉得这不够优雅。好吧,无论如何,如果我们无法检查 selected 是否为空,我可以坚持这一点。非常感谢。 =)
    • 如果您有 Telerik 套件(我假设您使用了他们的 Grid),我会建议您使用 RadDatePicker - 更加精致,并且该控件上的 SelectedDate 属性可以为空,因此您可以轻松检查用户是否选择了某些内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 2019-01-11
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多