C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: ASP.NET での Calenderコントロールの使い方


(過去ログ 80 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■47190 / inTopicNo.1)  ASP.NET での Calenderコントロールの使い方
  
□投稿者/ norineko (1回)-(2010/02/20(Sat) 15:06:32)

分類:[ASP.NET (VB)] 

ソフト名:Visual Web Developer 2008 Express Edition
使用言語:Visual Basic

「独習 ASP.NET2.0」を読んで勉強をしています。
Calenderコントロールの使い方を勉強中です。

@新規の「Webフォーム」でにCalenderコントロールを配置しました。
A@の下に「Literalコントロール」を配置しました。
BCalenderの「SelectionChanged」イベントに下記のコードを書きました。

    Dim x As StringBuilder
x = New StringBuilder
x.Append("opener.document.forms[0].FormView[1].yobi1TextBox.value='")
x.Append(Calendar1.SelectedDate.ToString("yyyy/MM/dd"))
x.Append("';self.close();")
Literal1.Text = x.ToString()

C「Literalコントロール」には、下記のコードをコードエディタにかきました。
    
    <script type="text/javascript" language="javascript">
<!--
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
//-->
</script>

D別のWebフォームから上記のCalenderのあるWebフォームを呼び出して、呼び出し元のWebフォームの「TextBox1」に選択したカレンダーの日付を書き込めるのですが、
FormViewの中にあるテキストボックスにカレンダーの値を書き込むことができません。
 
Eいろいろ試してみましたが、できません。
 なんとかして、FormViewにある日付入力用のテキストボックスにもCalendarコントロールからの入力を行いたいと思いいます。

 どうか、よろしくお願いします。

引用返信 編集キー/
■47200 / inTopicNo.2)  Re[1]: ASP.NET での Calenderコントロールの使い方
□投稿者/ もりお (187回)-(2010/02/21(Sun) 08:55:04)
No47190 (norineko さん) に返信

FormView の WebForm から Calendar の WebForm を呼び出して、日付を選択して
Calendar の WebForm を閉じる。日付選択のポップアップですか。

> x.Append("opener.document.forms[0].FormView[1].yobi1TextBox.value='")

書き込めない原因はおそらくこの部分です。
opener.document.forms[0] に FormView[1] オブジェクトが無いのではないでしょうか。

FormView[1] ではなくて FormView 内の TextBox の id 属性を指定すると良いかと思います。
この場合の id 属性はプログラム上のコントロール ID (TextBox.ID) ではなく ASP.NET の生成す
る ID (TextBox.ClientID) です。
FormView 内のコントロールの ClientID は実行時に動的に書き換えられるので ID と ClientID 
は異なります。
FormView を配置している WebForm を実行して HTML のソースを眺めてみてください。
おそらく FormView1_yobi1TextBox こんな感じの id 属性になっているはずです。
これを指定すると良いです。
x.Append("opener.document.forms[0].FormView1_yobi1TextBox.value='")

以下は余裕がありましたら、参考までに。
汎用性の観点からは上記のようなやり方はしないほうが善いです。
動的に生成されるものは動的に取得して、Calendar の WebForm は呼び出し元のコントロールに依存し
ないようにした方が善いです。
まずは
  [FormView を配置している .aspx.vb]
  FormView 内の TextBox の ClientID を返す Function を用意します。
  
  Function GetTextBoxClientID() As String
    Return Directcast(FormView1.FindControl("yobi1TextBox"), Control).ClientID
  End Function
  
つぎに
  [FormView を配置している .aspx]
  FormView 内の TextBox に値をセットする function を用意します。
  最初に作成した Function を呼び出すことで動的に生成された ClientID を取得して
  ClientID をもとに document.getElementById で TextBox を取得して値をセットします。
  
  <script type="text/javascript">
    function setText(value) {
      document.getElementById('<%= GetTextBoxClientID() %>').value = value;
    }
  </script>

最後に
  [Calendar を配置している .aspx.vb]
  上で用意した setText を呼び出すようにします。
  
  Protected Sub Calendar1_SelectionChanged(ByVal sender As Object, ByVal e As EventArgs) _
      Handles Calendar1.SelectionChanged
    Dim buffer As New StringBuilder()
    buffer.AppendLine(String.Format( _
      "opener.setText('{0}');", _
      Calendar1.SelectedDate.ToString("yyyy/MM/dd")))
    buffer.AppendLine("self.close()")
    Literal1.Text = buffer.ToString()
  End Sub

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -