-
各機能を順番に実装する。
-
新規作成の実装。 HTMLのnewBtnの属性にOnClick="New_Click"を追加する。 コードのクラスWebForm1に以下のメンバを追加する。
private void Make(int id)
{
grid.EditItemIndex = id;
ArrayList a = NameData.Instance(Server);
string s = (string)Session["sort"];
if (s != null)
{
a = (ArrayList)a.Clone();
a.Sort(NameData.Comparer(s));
}
grid.DataSource = a;
grid.DataBind();
ControlCollection cc = grid.Controls[0].Controls;
cc[cc.Count-2].Visible = id < 0;
}
public void New_Click(object source, EventArgs e)
{
ArrayList a = NameData.Instance(Server);
string name,tel,email;
DataGridItem di = (DataGridItem)grid.Controls[0]
.Controls[grid.Controls[0].Controls.Count-2];
name = ((TextBox)di.FindControl("NName")).Text;
tel = ((TextBox)di.FindControl("NTel")).Text;
email = ((TextBox)di.FindControl("NEmail")).Text;
lock (a)
{
int i = 1;
string s = name;
bool bFound = true;
while (bFound)
{
bFound = false;
foreach (NameData d in a)
{
if (d.Name == s)
{
bFound = true;
s = name + "(" + (++i).ToString() + ")";
break;
}
}
}
a.Add(new NameData(s,tel,email));
}
NameData.Save();
grid.CurrentPageIndex = (a.Count + grid.PageSize - 1) / grid.PageSize - 1;
Make(-1);
}
-
コード中のPage_Load内に以下を追加する。
if (!IsPostBack) Make(-1);
実行して新規作成ができることを確認する。
-
編集の実装。デザインのgridを選択し、プロパティのイベントを表示する。 EditCommandをダブルクリックし、以下を追加する。
Make(e.Item.ItemIndex);
実行して、編集をクリック後編集可能になることを確認する。
-
更新の実装。デザインのgridを選択し、プロパティのイベントを表示する。 UpdateCommandをダブルクリックし、以下を追加する。
TableCellCollection tc = grid.Items[e.Item.ItemIndex].Cells;
int id = int.Parse(tc[0].Text)-1;
ArrayList a = NameData.Instance(Server);
lock (a)
{
if (id >= a.Count) goto err;
NameData d = (NameData)a[id];
if (d.Name != ((Label)tc[1].Controls[1]).Text) goto err;
d.Tel = ((TextBox)tc[2].FindControl("ETel")).Text;
d.Email = ((TextBox)tc[3].FindControl("EEmail")).Text;
}
NameData.Save();
Make(-1);
return;
err:
Response.Write("更新できませんでした");
Make(-1);
実行して、編集をクリック後、更新できることを確認する。
-
キャンセルの実装。デザインのgridを選択し、プロパティのイベントを表示する。 CancelCommandをダブルクリックし、以下を追加する。
Make(-1);
実行して、編集をクリック後、キャンセルできることを確認する。
-
削除の実装。デザインのgridを選択し、プロパティのイベントを表示する。 DeleteCommandをダブルクリックし、以下を追加する。
TableCellCollection tc = grid.Items[e.Item.ItemIndex].Cells;
int id = int.Parse(tc[0].Text)-1;
ArrayList a = NameData.Instance(Server);
lock (a)
{
if (id >= a.Count) goto err;
NameData d = (NameData)a[id];
if (d.Name != ((Label)tc[1].Controls[1]).Text) goto err;
a.Remove(d);
for (int i=id;i<a.Count;++i) ((NameData)a[i]).ID = i+1;
}
NameData.Save();
grid.CurrentPageIndex = Math.Max(0,Math.Min(grid.CurrentPageIndex,
(a.Count + grid.PageSize - 1) / grid.PageSize - 1));
Make(-1);
return;
err:
Response.Write("既に削除されているか削除できませんでした");
Make(-1);
実行して、編集をクリック後、削除できることを確認する。
-
ページ分割の実装。デザインのgridを選択し、プロパティのイベントを表示する。 PageIndexChangedをダブルクリックし、以下を追加する。
grid.CurrentPageIndex = e.NewPageIndex;
Make(-1);
実行して、11個以上作成し、ページが分割されることを確認する。
-
ソートの実装。デザインのgridを選択し、プロパティのイベントを表示する。 SortCommandをダブルクリックし、以下を追加する。
Session["sort"] = e.SortExpression == "ID" ? null : e.SortExpression;
Make(-1);
実行して、ソートできることを確認する。
-
サンプル:WebForm1.aspx、WebForm1.aspx.cs。
以上。(2002/12/04)