- eパウダ〜とは - New! - おべんきょう - おしゃべり - メンバーページ - お茶会(オフ情報) - ショッピング - リンク -
 

 ASP.NET について

  ● いわゆる覚え書き。自分が学んだことを忘れないように残しておこうと思います。

   ● 目次 ●

  ・ はじめに

  ・ ボタンクリック時に次のページへ移動する

  ・ ボタンクリック時に新しいウィンドウを開く

  ・ DataGridの編集ボタンを押した時に、ドロップダウンリストを正しく表示させる

  ・ ボタン押下時に確認メッセージを出すには?

  ・ DataGridの削除ボタンで確認メッセージを出し、キャンセルの時は削除させないようにするには?

  ・ DataGridの削除ボタンで確認メッセージを出し、応答によって処理を分けるには?

  ・ 子ウィンドウを開くには?

  ・ 子ウィンドウで登録したデータを親ウィンドウに反映させるには?

  ・ 子ウィンドウで登録したデータを親ウィンドウに反映させ、親ウィンドウを更新させるには?

  ・ ボタンクリック時にXMLファイルをダウンロードするには?

  ・ パラメータの取得

  ・ DropDownListに値をセットするには

  ・ XMLコントロールにSQL Serverから取得したXMLデータを渡す

  ・ あとがき

 


 

 

  はじめに

   2003年冬から、とうとう会社でWebアプリを開発することになり、ASP.NETの勉強を始めました。

   勉強と言う実践の中で(コワッ)、忘れそうなものを覚書でまとめていきます。

  

 

  ご注意

  ※ 私が実行している環境は、VisualStudio.NET 2003 Professionalがインストールされています。

  ※ OSはWindows XP で、Microsoft SQL Server 2000がインストールされています。


 

 

  ボタンクリック時に次のページへ移動する

  リダイレクトしたいページ名を、Response.Redirect()メソッドに指定する。

  private void btDB_Memu_Ref_Click(object sender, System.EventArgs e)
  {
    this.Response.Redirect("NewPage.aspx");
  }

 


 

 

  ボタンクリック時に新しいウィンドウを開く

  JavaScript の window.open を、Button1 の Attributes の onclick にセットする。

  private void btDB_Date_Click(object sender, System.EventArgs e)
  {
     Button1.Attributes["onclick"] = "window.open('Calender.aspx','', 'width=250,height=250')";
  };

 このTIPSについてのコメントを送る


 

 

  DataGridの編集ボタンを押した時に、ドロップダウンリストを正しく表示させる

   ※ 編集モードになる前にはラベルで、編集モードにした時にドロップダウンリストにする場合など

     // データグリッド編集ボタン押下時の処理
    public void OnEdit_DataGrid(object sender, DataGridCommandEventArgs e)
    {

      // 編集モードにする行をセット
     this.DataGrid1.EditItemIndex = e.Item.ItemIndex;

     // DataGridをデータグリッドに表示
     DataGrid1.DataSource =DataTableA;
     DataGrid1.DataBind();

     // DataGridをデータグリッドに表示
     Label lb = (Label)e.Item.FindControl("lb");

     DropDownList ddl = (DropDownList)DataGrid1.Items[0].FindControl("ddl");
     ddlBlock.SelectedIndex = int.Parse(lbID_Block.Text);
    }

    順番を間違えると正常に動作しないので注意。

    1. 編集行のセット
    2. データグリッドに表示するデータをセットする
    3. データグリッドのドロップダウンリストにラベルの値をセットする

 このTIPSについてのコメントを送る

   記事作成日 : 2004/03/25

   記事最終更新日 : まだない。


 

 

  ボタン押下時に確認メッセージを出すには?

    ButtonのAttributesプロパティに、インデクサを用い"onclick"時の処理を登録する

   ex)

   private void Page_Load(object sender, System.EventArgs e)
   {
      Button.Attributes["onclick"] = @"return confirm('更新します\n\nよろしいですか?');";


   }

 このTIPSについてのコメントを送る

   関連情報 : 今のところなし

   学習先 : http://www.atmarkit.co.jp/fdotnet/dotnettips/015confirm/confirm.html

   記事作成日 : 2004/03/28

   記事最終更新日 : 今のところなし

 


 

 

  DataGridの削除ボタンで確認メッセージを出し、キャンセルの時は削除させないようにするには?

    ButtonのAttributesプロパティに、インデクサを用い"onclick"時の処理を登録する

   ex)

   // データグリッドの各行にデータが割り当てられる時の処理
   public void OnItemDataBound_DataGrid(object sender, DataGridItemEventArgs e)
   {
     //
     // このイベントは、データグリッドの各行にデータが割り当てられる毎に発生します。
     //

     // 行の各列についてループ

     foreach(TableCell cell in e.Item.Cells)
     {
       // このセルの中にある各コントロールについてループ
       foreach(Control ctrl in cell.Controls)
       {
         // このコントロールが Button であるかどうかを判断
         if (ctrl is Button)
         {
           // 削除ボタンに確認メッセージをセット
           if (ctrl.ID == "DelButton")
           {
             Button DelButton = (Button)ctrl;
             DelButton.Attributes["onclick"] =
             @"javascript: return confirm ('このレコードを削除します。\n\nよろしいですか?')";

           }
         }

       }
     }
   }

   キャンセルを押した時は、DelButtonを押した時に発生する削除処理は実行されません

 このTIPSについてのコメントを送る

   関連情報 : 今のところなし

   学習先 : http://www.atmarkit.co.jp/fdotnet/dotnettips/015confirm/confirm.html

   記事作成日 : 2004/03/18

   記事最終更新日 : 今のところなし

 


 

 

  DataGridの削除ボタンで確認メッセージを出し、応答によって処理を分けるには?

   ButtonのAttributesプロパティに、インデクサを用い"onclick"時の処理を登録する。その時「OK」を選んだ時の処理を記述する

  ex)

  【 HTML 】
  < /form>の直前あたりに、次の分を加える(名前は自由)
  <input type="hidden" id="hiddenCommand" name="hiddenCommand">

  【 .cs 】
  ボタンの設定時に次のコードを使用する
  cmdRegister.Attributes["onclick"] =
      @"javascript: if(window.confirm('この内容で登録します。\n\nよろしいですか?'))
      { document.forms[0].hiddenCommand.value = 'Register'; } ";

  // ボタンの OnClick イベントで次の条件判定をする
  public void OnClick_cmdRegister(object sender, System.EventArgs e)
  {
    if( Request.Form["hiddenCommand"] == @"Register" )
    {
       // ここに OK 押下時のコードを書く
    }
  }

 このTIPSについてのコメントを送る

   関連情報 : 削除ボタンが押された時に「OK,キャンセル」ダイアログを出し、キャンセルしたら処理をさせないようにするには?

   学習先 : 職場のTさんより

   記事作成日 : 2004/03/18

   記事最終更新日 : 今のところなし

 


 

  子ウィンドウを開くには?

    親ウィンドウにJapaScriptのwindow.open()を登録する

  // ページロード時の処理
  private void Page_Load(object sender, System.EventArgs e)
  {
     Button1.Attributes["onclick"] = "window.open('childWindow.aspx?id=name','', 'width=550,height=300');";
  }

 このTIPSについてのコメントを送る

   関連情報 : とくになし

   学習先 : とくになし

   記事作成日 : 2004/04/14

   記事最終更新日 : 今のところなし

 


 

  子ウィンドウで登録したデータを親ウィンドウに反映させるには?

    1) 親ウィンドウにJapaScriptのwindow.open()を登録する。
    2) その時に、子ウィンドウからデータを渡したいフィールドのidを引数として渡しておく。
    3) 子ウィンドウから、JavaScriptで親ウィンドウのidへデータを渡す

 

  【 親ウィンドウ 】

  // ページロード時の処理
  private void Page_Load(object sender, System.EventArgs e)
  {
     Button1.Attributes["onclick"] = "window.open('childWindow.aspx?id=name','', 'width=550,height=300');";
  }

  【 子ウィンドウ 】

  // 閉じるボタン押下時の処理
  // 閉じる時に親ウィンドウにデータをセットすると仮定
  private void btClose_Click(object sender, System.EventArgs e)
  {
    string id = Request.Params["id"];

    StringBuilder sb = new StringBuilder();
    sb.Append("<script Language='javascript'>\n");
    sb.Append("window.opener.Form1.");
    sb.Append(id);
    sb.Append(".value= '");
    sb.Append(("親ウィンドウに渡したいデータ");
    sb.Append("';\n");

    // この子ウィンドウを閉じる
    sb.Append("window.close();\n");
    sb.Append("</");
    sb.Append("script>");

   // ASP.NET サーバー コントロールが Page のクライアント側のスクリプトブロック
   // を出力できるようにします。
   this.RegisterClientScriptBlock("closewin", sb.ToString());
  }

 

 このTIPSについてのコメントを送る

   関連情報 : とくになし

   学習先 : とくになし

   記事作成日 : 2004/04/14

   記事最終更新日 : 今のところなし

 


 

  子ウィンドウで登録したデータを親ウィンドウに反映させ、親ウィンドウを更新させるには?

    1) 親ウィンドウにJapaScriptのwindow.open()を登録する。
    2) その時に、子ウィンドウからデータを渡したいフィールドのidを引数として渡しておく。
    3) 子ウィンドウから、JavaScriptで親ウィンドウのidへデータを渡す
    4) 子ウィンドウから、JavaScriptで親ウィンドウのidへデータを渡す

 

  【 親ウィンドウ 】

  // ページロード時の処理
  private void Page_Load(object sender, System.EventArgs e)
  {
     Button1.Attributes["onclick"] = "window.open('childWindow.aspx?id=name&flg=hiddenFlg','', 'width=550,height=300');";

    // hiddenコントロールのプロパティが変わったら、更新ボタンを押した時のイベントを起こす、というAttributesを追加
    hiddenFlg.Attributes.Add("OnPropertyChange", GetPostBackEventReference(btUpdate));
  }

  【 子ウィンドウ 】

  // 閉じるボタン押下時の処理
  // 閉じる時に親ウィンドウにデータをセットすると仮定
  private void btClose_Click(object sender, System.EventArgs e)
  {
    string id = Request.Params["id"];
    string flg = Request.Params["flg"];

    StringBuilder sb = new StringBuilder();
    sb.Append("<script Language='javascript'>\n");
    sb.Append("window.opener.Form1.");
    sb.Append(id);
    sb.Append(".value= '");
    sb.Append(("親ウィンドウに渡したいデータ");
    sb.Append("';\n");

    // 親ウィンドウのhiddenFlgのValueに値を入れると、hiddenFlgのAttributesにセットされた
    // OnPropertyChangeイベントが、btUpdate(更新ボタン)を押す
    //hiddenCstNewFlg.Attributes.Add("OnPropertyChange", GetPostBackEventReference(btCstNameUpdate));
    sb.Append("window.opener.Form1.");
    sb.Append(flg);
    sb.Append(".value= '");
    sb.Append(cst_id);
    sb.Append("';\n");


    // この子ウィンドウを閉じる
    sb.Append("window.close();\n");
    sb.Append("</");
    sb.Append("script>");

    // ASP.NET サーバー コントロールが Page のクライアント側のスクリプトブロック
    // を出力できるようにします。
    this.RegisterClientScriptBlock("closewin", sb.ToString());
  }

 

 このTIPSについてのコメントを送る

   関連情報 : とくになし

   学習先 : とくになし

   記事作成日 : 2004/04/14

   記事最終更新日 : 今のところなし

 


 

  ボタンクリック時にXMLファイルをダウンロードするには?

    1) Responseでダウンロードの準備。保存ダイアログが出た時のファイル名をSample.xmlに指定。
    2) XmlTextWriterクラスを作成。出力先をResponse.OutputStreamに指定。→これでローカルにファイルを作らなくてよい
    3) データベースから取得したデータでXML書式でデータを格納。結果はResponse.OutputStreamへ。

 

  using System.Xml;

  // XMLファイルダウンロードボタンクリック時の処理
  private void button_Click(object sender, System.EventArgs e)
  {
   GenerateXml();
  }

   // XMLファイルの作成
  private void GenerateXml()
  {
   Response.AddHeader("Content-Disposition","attachment;filename=Sample.xml");
   Response.ContentType = "application/octet-stream";

   // XmlTextWriterの出力先を、Response.OutputStreamに指定する
   XmlTextWriter tw = new XmlTextWriter(Response.OutputStream, null);

   // 目的のフォーマットを設定する
   tw.Formatting = Formatting.Indented;
   // XML作成開始
   tw.WriteStartDocument();
   tw.WriteStartElement("サンプルテーブル");

   // マスター情報を取得するSQL文
   string sql = GenerateMasterInfoSQL();

   // SQLの結果をテーブルに取得
   DataTable dt = TypeR.SqlWeb.GetDataTable("MasterInfoTable", sql);

   // テーブルをループ
   foreach(DataRow dr in dt.Rows)
   {
      tw.WriteStartElement("サンプル");
      tw.WriteElementString("サンプル名", dr["cstNAME"].ToString());
      tw.WriteElementString("サンプルコード", dr["CODE"].ToString());
      tw.WriteElementString("サンプルタイトル", dr["TITLE"].ToString());
      tw.WriteEndElement();
   }

   tw.WriteEndElement();
   tw.WriteEndDocument();

   //後処理を行う
   tw.Flush();
   tw.Close();

   this.Response.End();
  }

 このTIPSについてのコメントを送る

 関連情報 : 今のところなし

 学習先 : 職場のIさんより

 記事作成日 : 2004/08/07

 記事最終更新日 : 今のところなし

 


 

パラメータの取得

  test.aspx?id=categoryID のように渡した値を取得するには、Request.QueryString を使う。

    // クエリ文字列から渡された値の取得

    string id = Request.QueryString["ID"];

 このTIPSについてのコメントを送る

 関連情報 : 今のところなし

 学習先 : 今のところなし

 記事作成日 : 2005/03/19

 記事最終更新日 : 今のところなし


 

DropDownListに値をセットするには

  データベースから取得したデータをWebフォームに貼り付けたDropDownListに設定する方法。

  1. アクセス修飾子を protected に設定し、ListItem配列型のメソッド作成する。
  2. データベースから取得した値でListItemクラスを作成し、ArrayListにつめる。

  3. ArrayListのToArray()メソッドで、ListItem配列にして返値する。

   (コードの下に続く)

    using System.Collections;
    using System.Data;

    // 中略

    protected ListItem[] GetListData()
    {
        // ArrayListの準備
        ArrayList al = new ArrayList();

        // DataSetにデータベースから値を取得
        DataSet ds = (データベースから値を取得);

        // 取得したDataSetのすべての行にアクセスし、ListItemを作成する
        foreach (DataRow dr in ds.Tables[0].Rows)
        {

            // 表示用TextにNAME、値用のValueにIDをそれぞれ設定する
            ListItem li = new ListItem();
            li.Text = dr["NAME"].ToString();
            li.Value = dr["ID"].ToString();
            al.Add(li);
        }

        // ArrayListをListItem配列に
        return (ListItem[])al.ToArray(typeof(ListItem));
    }

  4. DropDownListのプロパティ画面で、DataSouceプロパティに GetListData()メソッドを設定する。(下図参照)
  5. DropDownListのプロパティ画面で、DataValueフィールドにValueを設定する。(下図参照)
  6. DropDownListのプロパティ画面で、DataTextフィールドにTextを設定する。
(下図参照)

   

  5.、6.、の手順を忘れると、ListItemのValueの値(ID)がSelectedValueで取得できません。

  何度取得しても、SelectedValueにはTextに設定した値(NAME)が表示されてしまい、私はこれでかなりハマりました…(笑)

  DropDownListのSelectedValueで選択されたValueを取得するには、5.、6.の作業が必要です。

 このTIPSについてのコメントを送る

 関連情報 : 今のところなし

 学習先 : プロフェッショナル ASP.NET 上 基本編 (インプレス)

 記事作成日 : 2005/09/07

 記事最終更新日 : 今のところなし


 

XMLコントロールにSQL Serverから取得したXMLデータを渡す

  1. SQL Server からデータを取得し、DataSetにセットする。

  2. XmlDataDocumentクラスのコンストラクタ引数にDataSetを渡す。

  3. XML WebサーバーコントロールのDocumentプロパティにXmlDataDocumentクラスのインスタンスを渡す。

  ※FOR XML句を使った効率的な方法があったら知りたいなぁ・・・

  このTIPSについてのコメントを送る


 キーワード : XML Webコントロール, Webサーバーコントロール, DBから取得したデータをXMLコントロールにセット
        SQL Server から取得したデータを XMLコントロールにセット

 関連情報 : 今のところなし

 学習先 : 今のところなし

 記事作成日 : 2005/09/15

 記事最終更新日 : 今のところなし

 


 

  あとがき


   記事作成日 : 2004/01/26

   記事最終更新日 : まだない。

 

   内容的におかしいところ、見づらい個所(色使い)などございましたらご指摘ください。

   同じようにASP.NETを利用されている方からの苦労話も大歓迎です。

 

   モンドリィの自習室 - トップへ - 悶絶C#へ