2012-07-26 2 views
1
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" 
    BorderStyle="None" BorderWidth="1px" CellPadding="4" 
    DataSourceID="SqlDataSource1" ForeColor="Black" GridLines="Horizontal" 
    Width="900px"> 
    <Columns> 
     <asp:TemplateField HeaderText="Date" SortExpression="Date"> 
      <EditItemTemplate> 
       <asp:TextBox ID="txtStartDate" runat="server" Text='<%# Bind("Date") %>'></asp:TextBox> 
       <asp:CalendarExtender 
           ID="CalendarExtender1" 
           onprerender="AjaxCalendar_PreRender" 
           runat="server" 
           TargetControlID="txtStartDate" 
           Format="dd/MM/yyyy" /> 

      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
       ErrorMessage="Date is required" Font-Italic="True" Font-Size="Small" 
       ForeColor="Red" ControlToValidate="txtStartDate"></asp:RequiredFieldValidator> 


      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label1" runat="server" Text='<%# Bind("Date") %>'></asp:Label> 
      </ItemTemplate> 
      <HeaderStyle HorizontalAlign="Left" /> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Time" SortExpression="Start_Time"> 
      <EditItemTemplate> 
       <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Start_Time") %>'></asp:TextBox> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label2" runat="server" Text='<%# Bind("Start_Time") %>'></asp:Label> 
      </ItemTemplate> 
      <HeaderStyle HorizontalAlign="Left" /> 
     </asp:TemplateField> 

     <asp:CommandField ShowEditButton="True"> 
     <ItemStyle ForeColor="#003366" /> 
     </asp:CommandField> 
    </Columns> 
</asp:GridView> 

특정 날짜 범위로 캘린더를 설정하고 싶습니다.GridView의 캘린더 프리 렌더링

protected void AjaxCalendar_PreRender(object sender, EventArgs e) 
{ 
    DateTime startDate = DateTime.Now.AddDays(1); 
    DateTime endDate = DateTime.Now.AddDays(60); 
    CalendarExtender ce = (CalendarExtender)GridView1.FindControl("CalendarExtender1"); 
    ce.StartDate = startDate; 
    ce.EndDate = endDate; 
} 

이것은 내가하는 일이지만, 개체 참조가 개체의 인스턴스로 설정되어 있지 않습니다. GridView FindControl이 오류를 일으켰 습니까?

+0

어디에서 예외가 발생합니까? 또한 http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net –

+0

을 참조하십시오. CalendarExtender ce = (CalendarExtender) GridView1.FindControl ("CalendarExtender1"); 이 줄 – user236501

답변

0

당신은 rowcreated 이벤트에 그 논리를 이동해야합니다 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcreated

당신이있는 gridview에있어 무엇을 기억하는 항목의 무리가 아닌 하나의 컨트롤입니다.

  • EditItemTemplate
  • InsertItemTemplate
    • ItemTemplate을 그리고 그것은 필요가 없기 때문에 당신은 모든 템플릿에 대한 확장이없는 : 그 항목이 템플릿에 의해 그룹화되어, 그들 중 일부는 . 있는 gridview 내부에 존재하지 않는 실제 CalendarExtender1 때문에

      CalendarExtender ce = (CalendarExtender)GridView1.FindControl("CalendarExtender1"); 
      

      을하지만, 각 항목의 내부, 즉 여러 개의 템플릿을 가질 수있다 : 즉,이 작동하지 않습니다 이유입니다.

      희망 나는 나 자신을 설명하고 당신이 그것을 끝낼 수 있습니다.