2010-02-24 2 views
1

Telerik의 RadGrid 및 달력을 사용하여 다른 usercontrol을 만들고있었습니다.캘린더의 선택한 날짜를 기준으로 텔리 크의 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/01)가 설정되어 있기 때문에 Calendar1.SelectedDate! = null 충분하지 않다. = (

감사합니다.

답변

3

당신이 그리드는 새로운 데이터를 표시하도록 Rebind를 호출해야 그리드 컨트롤에 새 데이터 소스를 바인딩합니다. 또는 당신이 내 의견에 NeedDataSource 이벤트 (더 우아한 솔루션을 사용할 수 있습니다)

두 번째 문제는이 (당신이 Telerik DatePicker에서 ASP.NET 달력을 사용하지 않는 가정 시도를 들면 다음과 같습니다.

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

나는 이러한 기능에 익숙하지 않다 = ( – Jronny

+1

그냥'RadGrid1.Rebind를 추가() ;'r 'BindData' 메쏘드에서'RadGrid1.DataSource = DataSource;'가 나온 후 –

+0

그냥 작동합니다! 감사. – Jronny

관련 문제