- PR -

FormView内DropDownList選択時のイベント

1
投稿者投稿内容
ojiboss
ベテラン
会議室デビュー日: 2008/02/06
投稿数: 52
投稿日時: 2008-04-25 16:30
FormView内のDropDownList1選択時にポストバックを発生させて同じFormView内の
DropDownList2のEnabled=Falseにしたいのですが、Page直下のDropDownListのように
SelectedIndexChangedイベントハンドラを実装することができるのでしょうか?

現在、Pageのポストバック処理でFormView内のDropDawnListの選択状態を判断するやり方を考えているのですが、他に良い方法があればと思い質問させていただきました。

よろしくお願いします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-04-25 17:03
> Page直下のDropDownListのようにSelectedIndexChangedイベントハンドラを実装することができるのでしょうか?

できたんじゃなかったかな?
ただ、DropDownList2を指定するのに、FormView.FindControl("DropDownList2")とかして取り出した結果をDropDownListにキャストしてから使う必要があったかも。
ojiboss
ベテラン
会議室デビュー日: 2008/02/06
投稿数: 52
投稿日時: 2008-04-25 17:27
>どっとねっとふぁんさん
レスありがとうございます。
実装方法に関するヘルプを探しているのですがうまくみつけることが
できません。ヘルプのありか等情報があればご教授いただければ幸いです。
よろしくお願いします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-04-25 19:26
FormViewに限定しての情報というのはないと思います。
少なくとも私は知りません。
まずやってみたほうが早いかも。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-04-26 02:42
POSTBACK という表現から、WEBですかね?

スクリプトで活性・非活性を切り替えるのはまずいのですか?
リスト変更のたんびにポストバックさせているんじゃイライラしそうな気がします。

あるテーブルの2行目の2カラム目のドロップリストの選択肢が 3 のとき、
その行の5カラム目ののドロップリストを非活性にするスクリプトは、

コード:

function mitameHenkou(s, n) {
var os = event.srcElement;

var tr = os;
while (tr.tagName.toLowerCase() != "tr") tr = tr.parentNode;
var td = tr.childNodes[n];
var chs = td.getElementsByTagName("select");

if (!!chs) {
if (os.selectedIndex == s) {
chs[0].disabled = false;
}
else {
chs[0].disabled = true;
}
}
}



onchange="mitameHenkou(3,5-1)" この呼び出しを2カラム目のクライアント
イベントへスクリプトを追加する書き方で設定してあげるだけです。
"3" と "5-1" は、動的にさせれば、何行でも対応できますね。

って、クライアントスクリプトとして追加してあげれば、いちいちポストバック
しなくても実現できそうです。

客先要望でスクリプト禁止だったり、
ポストバックすることで 表示状態をサーバーで管理したいのであれば
無理にとは言いません。


[ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-04-26 02:46 ]
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2008-04-26 06:57
こんな感じです。

コード:
Protected Sub DropDownList1_SelectedIndexChanged(...)
  Dim drop2 As DropDownList = _
   CType(FormView1.Row.FindControl("DropDownList2"), DropDownList)
  drop2.Enabled = False
End Sub

<asp:FormView ID="FormView1" runat="server" DataKeyNames="CategoryID" 
  DataSourceID="SqlDataSource1" AllowPaging="True">
  <ItemTemplate>
    DropDownList1:
    <asp:DropDownList ID="DropDownList1" runat="server" 
      AutoPostBack="true" 
      OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
      <asp:ListItem>item1</asp:ListItem>
      <asp:ListItem>item2</asp:ListItem>
      <asp:ListItem>item3</asp:ListItem>
    </asp:DropDownList>
    <br />
    DropDownList2:
    <asp:DropDownList ID="DropDownList2" runat="server" 
      AutoPostBack="true" 
      OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged">
      <asp:ListItem>item A</asp:ListItem>
      <asp:ListItem>item B</asp:ListItem>
      <asp:ListItem>item C</asp:ListItem>
    </asp:DropDownList>          
  </ItemTemplate>
</asp:FormView>


_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
ojiboss
ベテラン
会議室デビュー日: 2008/02/06
投稿数: 52
投稿日時: 2008-04-26 09:12
>どっとねっとふぁんさん
ヘルプを色々探し、WithEventsを宣言すればいいのかと思い、
(XXX.aspx.vb内:Protected WithEvents DropDownList As System.Web.UI.WebControls.DropDownList
など試しましたが、実現できずでした。他の方の意見を参考にします。

>ぴあちゃんさん
ご意見ありがとうございます。
クライアントスクリプトは使わない方法で実現しなければいけないので
今後、クライアントスクリプト使用可能時には参考にさせていただきます。
言葉足らずですいませんでした。
ご意見本当にありがとうございました。

>Accessさん
ありがとうございます。
実装してみます。また質問するかもしれませんが、よろしくお願いします。


ojiboss
ベテラン
会議室デビュー日: 2008/02/06
投稿数: 52
投稿日時: 2008-04-26 09:19
>Accessさん
実装できました。あまりに簡単なのでビックリです。
本当にありがとうございました。
1

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