DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33311 / inTopicNo.1)  動的コントロールの値によってさらに動的コントロールを画面に表示したい
  
□投稿者/ ゲジゲジナンバー 一般人(1回)-(2016/03/25(Fri) 18:18:11)
  • アイコン環境/言語:[VisualStudio2010Pro C#] 
    分類:[.NET] 

    お世話になります。

    C#のWebFormでWebアプリを開発中ですが、
    壁にぶち当たってしまったため皆様のお知恵をお貸しいただけますでしょうか。

    【問題】
    画面にあらかじめ配置したPlaceholderコントロールに対して、Init時に
    動的にTableコントロールやDropDownListコントロールを追加してします。

    この動的に追加したDropDownListで選択した値によって
    更に別のテーブルコントロールを制御したいと思っておりますが、
    思ったような制御を行うことができません。

    動的に追加したDropDownのOnSelectIndexChangedイベントの
    メソッド側で選択値をSessionに保持し、Init時にSessionの値に応じたコントロールの追加を行おうとも試みましたが、Init処理後にOnSelectIndexChangedイベントが
    動くため、1レスポンス遅れた制御になってしまいます。

    何かいい方法はありませんでしょうか。

引用返信 削除キー/
■33312 / inTopicNo.2)  Re[1]: 動的コントロールの値によってさらに動的コントロールを画面に表示したい
□投稿者/ ゲジゲジナンバー 一般人(2回)-(2016/03/25(Fri) 18:59:18)
  • アイコン連投すみません。
    テストコードのようなものを作成してみました。
    AAA→BBB→CCCとDropDownを選択した場合に
    →AAA→BBBと1テンポ遅れてしまいます。

    【aspx】
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication4.WebForm1" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <title></title>
    </head>
    <body>
    <form id="form1" runat="server">
    <asp:PlaceHolder ID="ph" runat="server"></asp:PlaceHolder>
    </form>
    </body>
    </html>




    【aspx.cs】
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    namespace WebApplication4
    {
    public partial class WebForm1 : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    var ddl = new DropDownList() { AutoPostBack = true };
    ddl.Items.Add(new ListItem("AAA", "1"));
    ddl.Items.Add(new ListItem("BBB", "2"));
    ddl.Items.Add(new ListItem("CCC", "3"));
    ddl.Items.Add(new ListItem("DDD", "4"));

    ddl.SelectedIndexChanged += new EventHandler(DDLChange);
    ph.Controls.Add(ddl);

    string ddlValue = (String)Session["ddlValue"];
    if (ddlValue != null)
    {
    var ddl2 = new DropDownList();
    switch (ddlValue)
    {
    case "1":
    ddl2.Items.Add("Select:AAA");
    break;
    case "2":
    ddl2.Items.Add("Select:BBB");
    break;
    case "3":
    ddl2.Items.Add("Select:CCC");
    break;
    case "4":
    ddl2.Items.Add("Select:DDD");
    break;
    }
    ph.Controls.Add(ddl2);
    }
    }

    protected void DDLChange(object sender, EventArgs e)
    {
    var ddl = (DropDownList)sender;
    Session.Add("ddlValue", ddl.SelectedValue);
    }
    }
    }



引用返信 削除キー/
■33313 / inTopicNo.3)  Re[2]: 動的コントロールの値によってさらに動的コントロールを画面に表示したい
□投稿者/ もりお 一般人(2回)-(2016/03/27(Sun) 18:01:10)
  • アイコンNo33312に返信(ゲジゲジナンバーさんの記事)

    OnSelectIndexChangedでテーブルコントロールを操作してしまえばよいのでないでしょうか。
引用返信 削除キー/
■33318 / inTopicNo.4)  Re[3]: 動的コントロールの値によってさらに動的コントロールを画面に表示したい
□投稿者/ ゲジゲジナンバー 一般人(3回)-(2016/03/31(Thu) 14:26:22)
  • アイコンもりおさん

    返信いただきありがとうございます。
    返答が遅くなってしまい申し訳ございません。


    OnSelectIndexCangedイベントでテーブルコントロールや
    DropDownコントロールを動的に追加し、追加したコントロールの
    イベント処理を行ったところ、イベントが実行されませんでした。

    他のサイトを調べたところ、初回のページ生成時にコントロールを生成しておかないと
    イベントが発生しないとのことです。

    もりおさんにアドバイスいただいた内容というのは、
    サーバ側ではなくクライアント側のスクリプトでの操作といことでしょうか。


引用返信 削除キー/
■33319 / inTopicNo.5)  Re[4]: 動的コントロールの値によってさらに動的コントロールを画面に表示したい
□投稿者/ もりお 一般人(3回)-(2016/04/01(Fri) 01:28:32)
  • アイコンNo33318に返信(ゲジゲジナンバーさんの記事)

    私はサーバ側で操作することを考えていました。
    OnSelectIndexChangedでは遅いのですね。
    Page_LoadやInitで追加したものについてはイベントが起きますよと。

    そうしますと、OnSelectIndexChangedでコントロールを新たに追加しつつ、
    追加しましたよというフラグをSessionに保持しつつ、
    Page_LoadやInitでフラグをチェックし、コントロールを再作成すれば行けますかね。
引用返信 削除キー/
■33320 / inTopicNo.6)  Re[5]: 動的コントロールの値によってさらに動的コントロールを画面に表示したい
□投稿者/ ゲジゲジナンバー 一般人(4回)-(2016/04/07(Thu) 11:13:34)
  • アイコンもりおさん

    返信いただきありがとうございます。
    またまた返信が遅くなってしまい申し訳ありません。

    やはりそのような感じでSessionを変更しつつ、
    InitやLoad時にSessionn状態によって変更するべきなのですね。

    もっと簡単に実装できればよかったんですが。。。
    毎回返信いただきありがとうございました。

    もりおさんにご教授いただいた方法で進めていきます。
解決み!
引用返信 削除キー/



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

このトピックに書きこむ

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

Mode/  Pass/


- Child Tree -