前提・実現したいこと
・DBで取得した値をDropDownListで表示
困っていること
・DataTableの値を編集した後にうまく表示されない
処理の流れ
(Page_Load)
1.DBからデータを取得
2.画面表示用にDataTableを作成
C#
1DataTable userInfo = new DabaTable(); //ユーザー情報 2DataTable jobInfo = new DataTable(); //仕事情報→この中身をドロップダウンにしたい 3 4//DBからデータを取得してuserInfo, jobInfoに入れる 5//userInfoには名前と誕生日、jobInfoには職業名と~~仕事区分~~が入ります→IDが入ります 6//(取得処理の内容は省略) 7 8//画面表示用 9DataRow dr; 10 table.Columns.Add("Name", typeof(string)); 11 table.Columns.Add("Birthday", typeof(string)); 12 table.Columns.Add("Job", typeof(ListItem[])); 13 14 foreach (DataRow row in userInfo.Rows) 15 { 16 dr = table.NewRow(); 17 dr["Name"] = row["名前"]; 18 dr["Birthday"] = row["誕生日"]; 19 dr["Job"] = null; //あとでデータを入れる 20 table.Rows.Add(dr); 21 } 22 23this.UserInfoGridView.DataSource = table; 24this.UserInfoGridView.DataBind();
(画面側)
1.表示
<asp:GridView ID="UserInfoGridView" runat="server" AutoGenerateColumns="False" OnRowDataBound="Grid_RowDataBound"> <Columns> <asp:BoundField HeaderStyle-Width="300" DataField="Name" HeaderText="名前"></asp:BoundField> <asp:BoundField HeaderStyle-Width="300" DataField="Birthday" HeaderText="誕生日"></asp:BoundField> <asp:templatefield HeaderStyle-Width="300" HeaderText="仕事" > <itemtemplate> <asp:DropDownList ID="Job" runat="server" AutoPostBack="true"></asp:DropDownList> </itemtemplate> </asp:templatefield> </Columns> </asp:GridView>
(OnRowDataBoundのとき)
C#
1protected void Grid_RowDataBound(object sender, GridViewRowEventArgs e) 2{ 3 if (e.Row.RowType == DataControlRowType.DataRow) 4 { 5 int cnt = jobInfo.Rows.Count; 6 ListItem[] list = new ListItem[cnt]; 7 var num = 0; 8 foreach (DataRow jobRow in jobInfo.Rows) 9 { 10 list[num] = new ListItem { Text = jobRow.ItemArray[0].ToString(), Value = jobRow.ItemArray[1].ToString() }; 11 num++; 12 } 13 //ListItem[]の入れ方がこれでいいのかがわからない 14 int tmp = e.Row.DataItemIndex; 15 table.Rows[tmp][2] = list; 16 17 var jobList = e.Row.FindControl("Job") as DropDownList; 18 jobList.DataSource = table; 19 //"Text"や"Value"を入れると「Textという名前のプロパティは含まれません」とエラーになる。。 20 jobList.DataTextField = "Job"; 21 jobList.DataValueField = "Job"; 22 jobList.DataBind(); 23 } 24}
結果
ドロップダウン自体は表示されますが、System.Web.UI.WebControls.ListItem[]という値がドロップダウンに表示されます。タスケテクダサイ。。
追記
DropDownListには職業名の一覧が入ります。
登録されたユーザーの職業を選択するイメージです。
DBデータ
ユーザテーブル
カラム:ID、名前、誕生日、仕事ID
仕事テーブル
カラム:ID、職業名、区分
~~
jobInfoにはユーザテーブル.仕事ID=仕事テーブル.IDで検索したデータが入っています。~~
jobInfoには仕事テーブルに登録されている全職業名が入ります
回答1件
あなたの回答
tips
プレビュー