分類:[ASP.NET (C#)]
2008/11/06(Thu) 13:19:28 編集(投稿者)
2008/11/06(Thu) 13:18:47 編集(投稿者)
2008/11/06(Thu) 13:12:18 編集(投稿者)
現在、Visual Studio 2008 Professional Editionを使って開発しています。
ASP.NET(C#)でわからないところがありますので教えてください。
GridViewを配置し、データベースから取得したデータを表示させています。
GridView左端にCommandField列(編集、更新、キャンセルボタン)を設け、
DataGrid上でデータの編集・更新が行なえるようにしたいです。
やりたいこととしては、GridView「編集」ボタン押下時にテキストボックスを隠し、
動的に配置したドロップダウンリストからユーザに値を選ばせます。
GridView「更新」ボタン押下時には、ドロップダウンリストから値を取得したいです。
現在、そのドロップダウンリストを見つけることが出来ずにいます。
DropDownList ddlItemName = (DropDownList)GridView1.Rows[e.RowIndex].Cells[2].FindControl("ddlItem1");
FindControlメソッドで検索してもnullが返る状態です。
(デバッグ時に確認したところ、セル上のコントロール数は、1と認識されています。)
動的にドロップダウンリストを配置する方法が誤っているのでしょうか。
お分かりになる方教えてください。よろしくお願いします。
[ソースコード]
DataTable m_dt = new DataTable();
DropDownList m_ddl = new DropDownList();
DataTable m_ddldt = new DataTable(); // DropDownList用データテーブル
protected void Page_Load(object sender, EventArgs e)
{
// データバインド
m_dt.Columns.Add("注文ID");
m_dt.Columns.Add("商品名");
DataRow drAdd;
drAdd = m_dt.NewRow();
drAdd["注文ID"] = "01";
drAdd["商品名"] = "トマト";
m_dt.Rows.Add(drAdd);
drAdd = m_dt.NewRow();
drAdd["注文ID"] = "02";
drAdd["商品名"] = "玉ねぎ";
m_dt.Rows.Add(drAdd);
GridView1.DataSource = m_dt;
GridView1.DataBind();
// DropDownList用データテーブルを作る
m_ddldt.Columns.Add("商品名");
m_ddldt.Columns.Add("価格");
DataRow drAdd2;
drAdd2 = m_ddldt.NewRow();
drAdd2["商品名"] = "トマト";
drAdd2["価格"] = 80;
m_ddldt.Rows.Add(drAdd2);
drAdd2 = m_ddldt.NewRow();
drAdd2["商品名"] = "玉ねぎ";
drAdd2["価格"] = 30;
m_ddldt.Rows.Add(drAdd2);
drAdd2 = m_ddldt.NewRow();
drAdd2["商品名"] = "キャベツ";
drAdd2["価格"] = 100;
m_ddldt.Rows.Add(drAdd2);
drAdd2 = m_ddldt.NewRow();
drAdd2["商品名"] = "人参";
drAdd2["価格"] = 70;
m_ddldt.Rows.Add(drAdd2);
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
// 編集を可能にする
GridView1.EditIndex = e.NewEditIndex;
string strColData1 = GridView1.Rows[e.NewEditIndex].Cells[1].Text;
string strColData2 = GridView1.Rows[e.NewEditIndex].Cells[2].Text;
GridView1.DataSource = m_dt;
GridView1.DataBind();
m_ddl.ID = "ddlItem1";
m_ddl.DataSource = m_ddldt;
m_ddl.DataTextField = "商品名";
m_ddl.DataValueField = "価格";
m_ddl.DataBind();
// DropDown
ListItem lstItem = m_ddl.Items.FindByText(strColData2);
lstItem.Selected = true;
GridView1.Rows[GridView1.EditIndex].Cells[2].Controls[0].Visible = false;
GridView1.Rows[GridView1.EditIndex].Cells[2].Controls.Add(m_ddl);
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
GridView1.DataSource = m_dt;
GridView1.DataBind();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string strID = ""; // 注文ID
string strItemName = ""; // 商品名
string strItemValue = ""; // 価格
// データの取得
TextBox tbID = (TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0];
strID = tbID.Text;
// ↓ ここでddlItemNameにnullが入ります(グリッド上のDropDownListコンポーネントを取得することが出来ません)
DropDownList ddlItemName = (DropDownList)GridView1.Rows[e.RowIndex].Cells[2].FindControl("ddlItem1");
// ※ ここでDropDownListで選択されたItemのSelectIndexとSelectValueを取得したいです
GridView1.EditIndex = -1;
GridView1.DataSource = m_dt;
GridView1.DataBind();
}