2012-07-26 58 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 – 2012-07-26 18:35:02

+0

CalendarExtender ce =(CalendarExtender)GridView1.FindControl(“CalendarExtender1”);这条线 – user236501 2012-07-27 01:43:25

回答

0

您需要在逻辑移动到rowcreated事件: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcreated

还记得你上一个GridView得到了什么是一堆项目,而不是一个单一的控制。这些项目是由模板分组,其中一些是:

  • 的ItemTemplate
  • EditItemTemplate中
  • InsertTemplate则

而且你不必对所有的模板的扩展,因为它是没有必要的。这就是为什么这是行不通的:

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

由于实际CalendarExtender1在GridView中不存在,但每个项目的内部,也可以有多个模板。

希望我解释自己,你可以完成。