2016-11-08 12 views
0

マイページにグリッドビュー内のテキストボックスに日付を追加する2つの方法があります。ユーザーは、日付を選択してボタンをクリックすると、すべての行の日付を設定できます。コードビハインドは各行を更新します。これはうまくいきます。今、カレンダーを各行に追加したいと思います。ajaxToolKit:gridviewの2行目でCalendarExtenderが動作しない

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ajaxToolkit" %> 
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 

これはグリッドビューの外にあり、正常に動作しています。

<asp:TextBox ID="SetDateTextBox" runat="server"></asp:TextBox> 
<ajaxToolkit:PopupControlExtender ID="SetDateTextBox_PopupControlExtender" runat="server" BehaviorID="SetDateTextBox_PopupControlExtender" 
         DynamicServicePath="" ExtenderControlID="" TargetControlID="SetDateTextBox" PopupControlID="Panel1" Position="Bottom"> 
        </ajaxToolkit:PopupControlExtender> 

<asp:Panel ID="Panel1" runat="server" Width="200px"> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<ContentTemplate> 
<asp:Calendar ID="Calendar1" runat="server" BackColor="White" BorderColor="Black" BorderStyle="Solid" CellSpacing="1" Font-Names="Verdana" Font-Size="9pt" ForeColor="Black" Height="250px" NextPrevFormat="ShortMonth" Width="330px"> 
<DayHeaderStyle Font-Bold="True" Font-Size="8pt" ForeColor="#333333" Height="8pt" /> 
<DayStyle BackColor="#CCCCCC" /> 
<NextPrevStyle Font-Bold="True" Font-Size="8pt" ForeColor="White" /> 
<OtherMonthDayStyle ForeColor="#999999" /> 
<SelectedDayStyle BackColor="#333399" ForeColor="White" /> 
<TitleStyle BackColor="#333399" BorderStyle="Solid" Font-Bold="True" Font-Size="12pt" ForeColor="White" Height="12pt" /> 
<TodayDayStyle BackColor="#999999" ForeColor="White" /> 
</asp:Calendar> 
</ContentTemplate> 
</asp:UpdatePanel> 
</asp:Panel> 

問題が発生しました。テンプレートフィールド内の各行にcalendarExtenderを追加しました。

<asp:TemplateField HeaderText="FINISH DATE" SortExpression="SCHED_FINISH_DATE"> 
<EditItemTemplate> 
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("SCHED_FINISH_DATE", "{0:d}") %>'></asp:TextBox> 
</EditItemTemplate> 
<ItemTemplate> 
<asp:TextBox ID="FinishDateTextBox" runat="server" Text='<%# Bind("SCHED_FINISH_DATE", "{0:d}") %>' ClientIDMode="AutoID"></asp:TextBox> 
<ajaxToolkit:CalendarExtender ID="FinishDateTextBox_CalendarExtender" runat="server" BehaviorID="FinishDateTextBox_CalendarExtender" 
          TargetControlID="FinishDateTextBox"/> 
</ItemTemplate> 
</asp:TemplateField> 

テキストボックスClientIDModeをAutoIDに設定しました。ページはエラーなしで読み込まれます。 1行目のテキストボックスをクリックすると、カレンダーがうまくいきます。 2行目以降をクリックするとカレンダーは表示されません。

+0

なぜあなたはAutoIDを使用していますか?データバインドされたコントロールは、デフォルトでPredictableを使用するので、それを使用する必要があります。実際には、ClientIDModeを設定しないでください。継承されているものに依存してください。 – Andrei

+0

Andrei。私はAutoIDが他の投稿で提案されているのを見ました。私もInheritを試しましたが、やはりまだ動作しません。 – redhook99

+0

私はgoogle chromeを実行し、HTMLを調べると、行1を超えるajaxcalender_containerはありません。これをどのようにコードするのか分かりません。このトピックについてはどこにも助けがないというのは非常に不満です。私には基本的な機能のようだ。 – redhook99

答えて

0

asp:panelとasp:UpdatePanelとともにpopupcontrollextenderを削除し、次のコードに置き換えました。このカレンダーは、すべての行に対してグローバルな変更を設定します。とても清潔です。

<asp:TextBox ID="SetDateTextBox" runat="server"></asp:TextBox> 
<ajaxtoolkit:calendarextender ID="CalendarEntender2" runat="server" TargetControlID="SetDateTextBox" /> 

次に、gridviewの内側。

<asp:TemplateField HeaderText="FINISH DATE" SortExpression="SCHED_FINISH_DATE" ItemStyle-Width="100"> 
<EditItemTemplate> 
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("SCHED_FINISH_DATE", "{0:d}") %>'></asp:TextBox> 
</EditItemTemplate> 
<ItemTemplate> 
<asp:TextBox ID="FinishDateTextBox" ClientIDMode="AutoID" runat="server" Text='<%# Bind("SCHED_FINISH_DATE", "{0:d}") %>'></asp:TextBox> 
<ajaxtoolkit:calendarextender ID="CalendarEntender1" runat="server" TargetControlID="FinishDateTextBox" /> 
</ItemTemplate> 
<ItemStyle Width="100px"></ItemStyle> 
</asp:TemplateField> 

ポップアップエキスパンドが問題を引き起こしている理由はまだ分かりません。

関連する問題