6月9日(火)1,2コマ目(A班)、3,4コマ目(B班)

今日の予習

List<T>クラスについて

Listクラスとは、配列ようなモノ。クラスなのでメソッドがある。
クラスなので利用する際はインスタンス生成を行う必要がある。
なお、<T>のTはこのListの要素の型。

1.使うには

変数宣言だけなく、インスタンス生成も必要。

// 宣言
// 要素がstringのListを変数名itemsで宣言
List<string> items = null;

// インスタンス生成
// Listクラスのインスタンスを生成し、宣言したitemsが参照する
items = new List<string>();

2.要素追加

ListクラスのAdd()メソッドを使う。

items.Add("ワンコ");
items.Add("ニャンコ");

3.要素削除

ListクラスのRemove()メソッドを使う。
引数には削除したい要素を指定する。

items.Remove("ニャンコ");


4.要素を取得する


①foreachを使う
foreachを使って、要素を順に取り出す。

foreach(string str in items)
{
    Console.WriteLine(str);        // 取得した要素を表示
}

②forを使う
xx番目の要素にアクセスするには、[]で指定する。
要素数はCountプロパティでわかる。

for(int cnt=0 ; cnt<items.Count ; cnt++)
{
  Console.WriteLine(items[cnt]);     // cnt番目の要素を表示
}

今日、やったこと

パンケーキサイト作成

今日のホワイトボードとソースコード

パンケーキサイト[その1]


選択したパンケーキの受け渡し

  1. 1ページ目では複数種類のパンケーキが選択できる。
  2. これを2ページ目で表示するには、選択したパンケーキをSessionオブジェクトに格納する必要がある。
  3. 2ページ目でSessionオブジェクトから取り出す際、選択数に関係なく、1回で取り出したい。
  4. そのためには、選択したパンケースを1つにまとめる必要がある。
  5. そこでList<T>クラスを使う。

ソースコード

〇WebForm1.aspx.cs
ポイントは初回アクセス時にはSessionオブジェクトにはなにもないこと。
よって、Sessionオブジェクトからはnullが返ってくる。


〇WebForm2.aspx.cs
Page_Load()メソッド
選択商品をListBoxに表示するために以下を行う。
  • Sessionオブジェクトから選択商品リストを取り出し
  • ListBoxに表示

削除ボタンクリック時の処理
  • ListBoxから選択商品情報取得
  • Sessionオブジェクトにある選択商品リストから削除対象を削除(Remove()メソッド)
  • ListBoxを再描画

パンケーキサイト[その2]

ページ数が増えました。

1,2ページ目

パンケーキサイト[その1]とほぼ一緒。
Sessionオブジェクトに選択商品を格納する際、
  • 1ページ目では”pancake”という名前で格納
  • 2ページ目では”meal”という名前で格納
している。

3ページ目

基本的にはパンケーキサイト[その1]と同じです。
が、削除ボタンに工夫が必要です。


Page_Load()とButton1_Click()の実行順は
  1. Page_Load()
  2. Button1_Click()
です。
Page_Load()では
  • Sessionオブジェクトから選択商品リストを取り出す
  • ListBoxに表示
を行います。

2ページ目から3ページ目に移動したとき、Page_Load()が実行され、ListBoxに選択商品を追加します。

削除ボタンをクリックすると、
  1. Page_Load()
  2. Button_Click()
の順で実行されます。
ここでポイントになるのは、Page_Load()です。
Page_Load()では、ListBoxに選択商品を追加します。2度目です。よって、同じ商品が重複して表示されます。
削除対象商品を含むListBoxはこのあとのButton_Click()で再描画するため、問題が発生しませんが、削除対象ではないListBoxには重複して表示したままになります。

そこで、削除ボタンをクリックした際、削除対象を含まないListBoxも再描画するようにしました(reloadAll()メソッド)。
しかしながら、これはいい解決法ではありません。

コメント

このブログの人気の投稿

6月2日(火)1,2コマ目(A班)、3,4コマ目(B班)

7月21日(火)1、2コマ目

9月1日(火)1、2コマ目