2009年8月11日火曜日

第 6 章 野球シミュレーション 2

野球チームの編集

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.IO;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Chap6_teams : System.Web.UI.Page
{
string DataFolderURL = "~/Chap6/Data/";
string TeamListFile = "チームリスト.xml";
string NewTeamFile = "新チームテンプレート.xml";
string DataFolder;

DataSet teamDS = new DataSet(); // メンバ表示に使用する選択チームの DataSet
DataSet teamListDS = new DataSet(); // チーム名一覧用の DataSet(編集作業用)

// ページロード時の処理
protected void Page_Load(object sender, EventArgs e)
{
DataFolder = Server.MapPath(DataFolderURL);

// ViewState から編集中のチームデータを取得する。
if (ViewState["TeamDS"] != null)
{
teamDS = (DataSet)ViewState["TeamDS"];
Member.DataSource = teamDS.Tables["選手"];
}
}

// 表示直前の処理
protected void Page_PreRender(object sender, EventArgs e)
{
// 削除欄のチームメンバのドロップダウンリストを更新する。
teamListDS.Clear();
teamListDS.ReadXml(DataFolder + TeamListFile);
TeamName_Del.DataSource = teamListDS.Tables["チーム"];
TeamName_Del.DataBind();
}

// チーム選択が変更された時の処理
protected void Team_Changed(object sender, EventArgs e)
{
// チームデータの編集中だった場合は、変更をキャンセルして戻る。
if (Panel_Edit.Visible == true)
{
Label_TeamSelectError.Text
= "編集中はチームを変更できません。「保存」または「キャンセル」をおこなってください。";
TeamName_Select.SelectedValue = (string)teamDS.Tables["チーム"].Rows[0]["チーム名"];
return;
}

// 選択されたチームのメンバを表示する。
teamDS.Clear();
teamDS.ReadXml(DataFolder + TeamName_Select.SelectedValue + ".xml");
Member.DataSource = teamDS.Tables["選手"];
Member.DataBind();

// 選手が選択されていない状態にする。入力欄をクリアする。
Member.SelectedIndex = -1;
Order.Text = "";
Name.Text = "";
Hit.Text = "";

// ViewSate にチームデータを保存する。
ViewState["TeamDS"] = teamDS;
}

// 編集ボタンが押された時の処理
protected void Button_Edit_Click(object sender, EventArgs e)
{
// 編集用のボタンを表示して、編集以外のボタンは使用できないようにする。
Button_Up.Visible = true;
Button_Down.Visible = true;
Panel_Edit.Visible = true;
Button_NewTeam.Enabled = false;
Button_DelTeam.Enabled = false;
}

// 選手が選択された時の処理
protected void Member_Selected(object sender, EventArgs e)
{
// 選手が選択されていない場合は何もしない。
if (Member.SelectedIndex == -1)
return;
// 選択されたメンバを編集用 TextBox に表示する。
Order.Text = Member.SelectedRow.Cells[1].Text;
Name.Text = Member.SelectedRow.Cells[2].Text;
Hit.Text = Member.SelectedRow.Cells[3].Text;
}

// 変更ボタンが押された時の処理
protected void Modify_Click(object sender, EventArgs e)
{
// 選手が選択されていない場合は何もしない。
if (Member.SelectedIndex == -1)
return;
// 編集用 TextBox に設定された値でチームデータを更新する。
DataRow row = teamDS.Tables["選手"].Rows[Convert.ToInt32(Order.Text) - 1];
row["打順"] = Order.Text;
row["名前"] = Name.Text;
row["打率"] = Hit.Text;

// メンバを表示する。
Member.DataBind();

//ViewState にデータを保存する。
ViewState["TeamDS"] = teamDS;
}

// 選手リストの上矢印ボタンが押された時の処理
protected void Button_Up_Click(object sender, ImageClickEventArgs e)
{
int index;
string temp;
DataTable teamTable;

index = Member.SelectedIndex;
// 選手が選択されていないか、先頭打者の場合は何もしない。
if (index == -1 || index == 0)
return;
teamTable = teamDS.Tables["選手"];

// 一つ前の選手と入れ替える。
temp = (string)teamTable.Rows[index - 1]["名前"];
teamTable.Rows[index - 1]["名前"] = (string)teamTable.Rows[index]["名前"];
teamTable.Rows[index]["名前"] = temp;
temp = (string)teamTable.Rows[index - 1]["打率"];
teamTable.Rows[index - 1]["打率"] = (string)teamTable.Rows[index]["打率"];
teamTable.Rows[index]["打率"] = temp;

Order.Text = (string)teamTable.Rows[index - 1]["打順"];

// メンバ表示を更新する。
Member.DataBind();
Member.SelectedIndex = index - 1;

//ViewState にデータを保存する。
ViewState["TeamDS"] = teamDS;
}

// 選手リストの下矢印ボタンが押された時の処理
protected void Button_Down_Click(object sender, ImageClickEventArgs e)
{
int index;
string temp;
DataTable teamTable;

index = Member.SelectedIndex;
// 選手が選択されていないか、最後の選手の場合は何もしない。
if (index == -1 || index == 8)
return;
teamTable = teamDS.Tables["選手"];

// 一つ後の選手と入れ替える。
temp = (string)teamTable.Rows[index + 1]["名前"];
teamTable.Rows[index + 1]["名前"] = (string)teamTable.Rows[index]["名前"];
teamTable.Rows[index]["名前"] = temp;
temp = (string)teamTable.Rows[index + 1]["打率"];
teamTable.Rows[index + 1]["打率"] = (string)teamTable.Rows[index]["打率"];
teamTable.Rows[index]["打率"] = temp;

Order.Text = (string)teamTable.Rows[index + 1]["打順"];

// メンバ表示を更新する。
Member.DataBind();
Member.SelectedIndex = index + 1;

//ViewState にデータを保存する。
ViewState["TeamDS"] = teamDS;
}

// 保存ボタンが押された時の処理
protected void Button_Save_Click(object sender, EventArgs e)
{
// 編集用のボタンを非表示にする。編集以外のボタンを使用できるようにする。
Button_Up.Visible = false;
Button_Down.Visible = false;
Panel_Edit.Visible = false;
Button_NewTeam.Enabled = true;
Button_DelTeam.Enabled = true;

// 編集されたチームメンバのデータを保存する。
teamDS.WriteXml(DataFolder + TeamName_Select.SelectedValue + ".xml");

// 選手が選択されていない状態にする。入力欄をクリアする。
Member.SelectedIndex = -1;
Order.Text = "";
Name.Text = "";
Hit.Text = "";

// ViewSate にデータを保存する。
ViewState["TeamDS"] = teamDS;
}

// キャンセル ボタンが押された時の処理
protected void Button_Cancel_Click(object sender, EventArgs e)
{
// 編集用のボタンを非表示にして、編集以外のボタンは使用できるようにする。
Button_Up.Visible = false;
Button_Down.Visible = false;
Panel_Edit.Visible = false;
Button_NewTeam.Enabled = true;
Button_DelTeam.Enabled = true;

// サーバー上のチームファイルで表示を更新する。
teamDS.Clear();
teamDS.ReadXml(DataFolder + TeamName_Select.SelectedValue + ".xml");
Member.DataSource = teamDS.Tables["選手"];
Member.DataBind();

// 選手が選択されていない状態にする。入力欄をクリアする。
Member.SelectedIndex = -1;
Order.Text = "";
Name.Text = "";
Hit.Text = "";

// ViewSate にデータを保存する。
ViewState["TeamDS"] = teamDS;
}

// チームの新規作成ボタンが押された時の処理
protected void Button_NewTeam_Click(object sender, EventArgs e)
{
DataSet newTeamDS = new DataSet();
DataRow row;

// 指定されたチーム名のファイルが既に存在する場合には何もしない。
if (File.Exists(DataFolder + TeamName_New.Text + ".xml"))
{
Label_TeamError.Text = "指定されたチーム名は既に存在します。";
return;
}
// テンプレートファイルを使って新チームを作成する。
newTeamDS.ReadXml(DataFolder + NewTeamFile);
row = newTeamDS.Tables["チーム"].Rows[0];
row["チーム名"] = TeamName_New.Text;
newTeamDS.WriteXml(DataFolder + TeamName_New.Text + ".xml");

// チームリストデータベースを更新する。
teamListDS.Clear();
teamListDS.ReadXml(DataFolder + TeamListFile);
row = teamListDS.Tables["チーム"].NewRow();
row["チーム名"] = TeamName_New.Text;
teamListDS.Tables["チーム"].Rows.Add(row);
teamListDS.WriteXml(DataFolder + TeamListFile);

// 新しいチームのメンバを表示する。
TeamName_Select.DataBind();
TeamName_Select.SelectedIndex = TeamName_Select.Items.Count - 1;
Member.DataSource = newTeamDS.Tables["選手"];
Member.DataBind();

TeamName_New.Text = "";

//ViewState にチームデータを保存する。
ViewState["TeamDS"] = newTeamDS;
}

// チームの削除ボタンが押された時の処理
protected void Button_DelTeam_Click(object sender, EventArgs e)
{
string teamName = TeamName_Del.SelectedValue;

// 最新のチーム一覧ファイルを読み込み、削除する行を探す。
teamListDS.Clear();
teamListDS.ReadXml(DataFolder + TeamListFile);
DataRow row = teamListDS.Tables["チーム"].Select("チーム名 = '" + teamName + "'")[0];

// チーム一覧データベースを更新する。
teamListDS.Tables["チーム"].Rows.Remove(row);
teamListDS.WriteXml(DataFolder + TeamListFile);

// 選択されたチームのデータファイルを削除する。
File.Delete(DataFolder + teamName + ".xml");

// ドロップダウンリストの選択肢を更新する。
TeamName_Select.DataBind();
}
}



終了。

0 コメント:

コメントを投稿