Как изменить данные в RadGrid Telerik на основе выбранных дат календаря?

StackOverflow https://stackoverflow.com/questions/2324271

Вопрос

Я создавал еще один пользовательский элемент управления с помощью RadGrid и Calendar от 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) как мы можем проверить, ничего ли не выбрано в элементах управления «Календарь», поскольку установлена ​​дата (01.01.0001), даже если мы ничего не выбираем из этого календаря, таким образом Calendar1.SelectedDate != ноль недостаточно."="

Спасибо.

Это было полезно?

Решение

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

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

if(Calendar1.SelectedDate.Date == DateTime.MinValue) {
    //no date selected
} else {
    //date is selected
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top