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ページ目では複数種類のパンケーキが選択できる。
- これを2ページ目で表示するには、選択したパンケーキをSessionオブジェクトに格納する必要がある。
- 2ページ目でSessionオブジェクトから取り出す際、選択数に関係なく、1回で取り出したい。
- そのためには、選択したパンケースを1つにまとめる必要がある。
- そこで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()の実行順は
- Page_Load()
- Button1_Click()
です。
Page_Load()では
- Sessionオブジェクトから選択商品リストを取り出す
- ListBoxに表示
を行います。
2ページ目から3ページ目に移動したとき、Page_Load()が実行され、ListBoxに選択商品を追加します。
削除ボタンをクリックすると、
- Page_Load()
- Button_Click()
の順で実行されます。
ここでポイントになるのは、Page_Load()です。
Page_Load()では、ListBoxに選択商品を追加します。2度目です。よって、同じ商品が重複して表示されます。
削除対象商品を含むListBoxはこのあとのButton_Click()で再描画するため、問題が発生しませんが、削除対象ではないListBoxには重複して表示したままになります。
そこで、削除ボタンをクリックした際、削除対象を含まないListBoxも再描画するようにしました(reloadAll()メソッド)。
しかしながら、これはいい解決法ではありません。
コメント