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>

特定の日付範囲でカレンダーを設定したい。

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 がエラーの原因ですか?

4

1 に答える 1

0

そのロジックをrowcreatedイベントに移動する必要があります:http: //msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcreated

グリッドビューで取得したのは、単一のコントロールではなく、一連のアイテムであることを忘れないでください。これらのアイテムはテンプレートごとにグループ化されており、その一部は次のとおりです。

  • ItemTemplate
  • EditItemTemplate
  • InsertItemTemplate

また、必要がないため、すべてのテンプレートのエクステンダーはありません。これが機能しない理由は次のとおりです。

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

実際のCalendarExtender1はグリッドビュー内ではなく、各アイテム内に存在するため、複数のテンプレートを持つことができます。

私が自分自身を説明していることを願っています、そしてあなたはそれを終えることができます。

于 2012-08-06T20:30:31.173 に答える