Как изменить данные в Radrikrid Telerik на основе выбранных дат Календаря? - PullRequest
1 голос
/ 24 февраля 2010

Я создавал еще один пользовательский контроль с помощью Radrikrid и календаря Telerik.

<%@ 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) как мы можем проверить, что ничего не выбрано в элементах управления Calendar, потому что есть дата (01/01/0001), установленная, даже если мы ничего не выбираем из этого календаря, таким образом Calendar1.SelectedDate! = null недостаточно. = (

Спасибо.

1 Ответ

3 голосов
/ 24 февраля 2010

Когда вы привязываете новый источник данных к элементу управления сеткой, вам нужно вызвать Rebind, чтобы сетка показала новые данные. В качестве альтернативы вы можете использовать NeedDataSource событие (на мой взгляд, более элегантное решение)

Для решения второй проблемы попробуйте это (при условии, что вы используете ASP.NET Calendar, а не Telerik DatePicker:

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