- PR -

DataGrid内でPopupControlExtenderを使うには?

1
投稿者投稿内容
sent
会議室デビュー日: 2007/07/02
投稿数: 8
投稿日時: 2007-07-10 16:25
お世話になります。
VS2005にてWebアプリケーションを開発しています。
ASP.NET 2.0(VB)とAjax ControlToolkit を使用しています。

入力や選択が可能な表内に、日付の入力補助用としてカレンダーコントロールを使用するつもりでいます。
15列×100行なので、ASPのDataGridを使って、ItemTemplate内にテキストボックスとカレンダーコントロールを配置したのですが、デザイナで見るとテキストボックスとカレンダーは見えていますが、PanelやUpdatePanel、PopupControlExtenderが見えておらず、ソース側でも『宣言されていません』と言われてしまいます。

以下がaspxのソースの抜粋です。

<asp:DataGrid id="DataGrid " AutoGenerateColumns=false ShowHeader=true runat="server" Font-Size="12px">
 <column>
  <asp:TemplateColumn HeaderText="対象日">
   <ItemTemplate>
    <asp:TextBox ID="txtDate" runat="server"></asp:TextBox>
      <asp:Panel ID="Panel" runat="server" CssClass="popupControlCal">
      <asp:UpdatePanel ID="UpdatePanel" runat="server">
       <ContentTemplate>
        <center>
          <asp:Calendar ID="Calendar" runat="server"
           OnSelectionChanged="Calendar_SelectionChanged">
          </asp:Calendar>
         </center>
       </ContentTemplate>
      </asp:UpdatePanel>
      </asp:Panel>
      <ajaxToolkit:PopupControlExtender ID="PopupControlExtender" runat="server"
       TargetControlID="txtDate" PopupControlID="Panel" Position="bottom">
      </ajaxToolkit:PopupControlExtender>
    </ItemTemplate>
   </asp:TemplateColumn>


中略
</asp:DataGrid>

ScriptManagerは<form>タグの次に記述しています。
DataGrid外のPopupControlExtenderなどはちゃんと見えています。

DataGridでは無理なのでしょうか?
もしかしたら初歩的な質問かもしれないと思って色々検索したのですが、見当たりませんでした。
参考になる書籍をご存知でしたら、合わせてご教授ください。

よろしくお願いします。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-07-11 06:45
まず、ASP.NET 2.0を使用するときは、DataGridではなくGridViewを使いましょう。

デザイナでDataGridのItemTemplateを表示させるには、DataGridのスマートタグから
「テンプレートの編集」を選択してください。

これで、PopupControlExtenderが見えるはずです。

Calendar + PopupControlExtenderでドロップダウンカレンダーを実装するよりも
CalendarExtenderを使用したらどうでしょうか。



_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集

[ メッセージ編集済み 編集者: Access 編集日時 2007-07-11 07:50 ]
sent
会議室デビュー日: 2007/07/02
投稿数: 8
投稿日時: 2007-07-11 11:20
Accessさん、ありがとうございます。
GridViewの方がいいんですね。つい慣れている方にしてしまいました。


GridViewのItemTemplateにCalendarExtendarを追加したところ、
デザイナでも見えるようになりましたが、実行すると

【コントロールにコード ブロック (<% ... %>) が含まれているため、コントロールのコレクションを変更できません。】

と言われてしまいます。
実は「<link media=screen href="<%= CssUrl() %>" type=text/css rel=StyleSheet>」というように<HEAD>内に書いているのですが、これがいけないのでしょうか。

ポップアップメッセージをサーバー側から出させる為にも
JavaScriptで
【 var MSG = new String("<% = Message() %>");
  alert(MSG);                     】
のように書いているので、ここも言われているようです。


それから、Visible=False にしたり、DataGrid内に書いたりすると、

【Sys.ArgumentException Value must not be null for Controls and Behaviors.】

というエラーになってしまうようです。
バインドされていない=存在しないということで言われるのかもしれません。


カレンダーのみの別画面を用意して、モーダルで表示させるしかないのでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)