トップ回答者
LISTVIEWについて

質問
-
初歩的な質問で申し訳ないのですが、
データバインドでMYSQLのデータをLISTVIEWに表示することはできたのですが、
選択項目の値を取得するにはどのように行えば良いのでしょうか。
一応、CommandName="Select"とした選択ボタンを作り、SelectedIndexChangedイベントが発生することはわかったのですが
ここから各列のアイテムを取得する方法がわかりません。
ListView.SelectedValueで主キーである値が取れることはわかりましたが、
それ以外の列(項目・コントロール値)の値はどうやって取得すれば良いのでしょうか。
ListView.SelectedIndexで選択行が取得できるということ確認してみても
SelectedIndexChangedイベント内ではどの行を選択しても値が1のままで変化がない状況でした。
Googleで asp.net listview 値 取得 などで索してみても、
Windowsフォームなどと中々判断がつかず、こちらで質問した方が良いかと思い投稿させて頂きました。
どうぞ宜しくお願い致します。<asp:ListView ID="ListView2" runat="server" DataSourceID="MySqlDataSource2" InsertItemPosition="LastItem" > <LayoutTemplate> <table id="Table3" runat="server"> <tr id="Tr1" runat="server"> <td id="Td1" runat="server" style=""> <asp:DataPager ID="DataPager1" runat="server"> <Fields> <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowLastPageButton="True" /> </Fields> </asp:DataPager> </td> </tr> <tr id="Tr3" runat="server"> <td id="Td2" runat="server"> <table id="itemPlaceholderContainer" runat="server" border="0" style=""> <tr id="Tr5" runat="server" style=""> <th id="Th5" runat="server"></th> <th id="Th6" runat="server" visible="false">id</th> <th id="Th7" runat="server" style="width: 40px">グループID</th> <th id="Th8" runat="server" style="width: 120px">グループ2名称</th> </tr> <tr id="itemPlaceholder" runat="server"> </tr> </table> </td> </tr> </table> </LayoutTemplate> <AlternatingItemTemplate> <tr style=""> <td> <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="削除" /> <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="編集" /> </td> <td style="display: none"> <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' /> </td> <td> <asp:Label ID="groupidLabel" runat="server" Text='<%# Eval("groupid") %>' Width="40px" /> </td> <td> <asp:Label ID="group2_nameLabel" runat="server" Text='<%# Eval("group2_name") %>' Width="200px" /> </td> </tr> </AlternatingItemTemplate> <EditItemTemplate> <tr style=""> <td> <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="更新" /> <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="キャンセル" /> </td> <td style="display: none"> <asp:TextBox ID="idTextBox" runat="server" Text='<%# Bind("id") %>' /> </td> <td> <asp:TextBox ID="groupidTextBox" runat="server" Text='<%# Bind("groupid") %>' Width="40px" /> </td> <td> <asp:TextBox ID="group2_nameTextBox" runat="server" Text='<%# Bind("group2_name") %>' Width="200px" /> </td> </tr> </EditItemTemplate> <EmptyDataTemplate> <table id="Table4" runat="server" style=""> <tr> <td>データは返されませんでした。</td> </tr> </table> </EmptyDataTemplate> <InsertItemTemplate> <tr style=""> <td> <asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="挿入" /> <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="クリア" /> </td> <td style="display: none"> <asp:TextBox ID="idTextBox" runat="server" Text='<%# Bind("id") %>' /> </td> <td> <asp:TextBox ID="groupidTextBox" runat="server" Text='<%# Bind("groupid") %>' Width="40px" /> </td> <td> <asp:TextBox ID="group2_nameTextBox" runat="server" Text='<%# Bind("group2_name") %>' Width="200px" /> </td> </tr> </InsertItemTemplate> <ItemTemplate> <tr style=""> <td> <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="削除" /> <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="編集" /> </td> <td style="display: none"> <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' /> </td> <td> <asp:Label ID="groupidLabel" runat="server" Text='<%# Eval("groupid") %>' Width="40px" /> </td> <td> <asp:Label ID="group2_nameLabel" runat="server" Text='<%# Eval("group2_name") %>' Width="200px" /> </td> </tr> </ItemTemplate> <SelectedItemTemplate> <tr style=""> <td> <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="削除" /> <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="編集" /> </td> <td style="display: none"> <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' /> </td> <td> <asp:Label ID="groupidLabel" runat="server" Text='<%# Eval("groupid") %>' Width="40px" /> </td> <td> <asp:Label ID="group2_nameLabel" runat="server" Text='<%# Eval("group2_name") %>' Width="200px" /> </td> </tr> </SelectedItemTemplate> </asp:ListView> </div> <asp:SqlDataSource ID="MySqlDataSource2" runat="server" ProviderName="<%$ ConnectionStrings:MySqlDataSorce.ProviderName %>" ConnectionString="<%$ ConnectionStrings:MySqlDataSorce %>" DeleteCommand="DELETE FROM m_grooup2 WHERE (id = @id) AND (groupid = @groupid)" InsertCommand="INSERT INTO m_grooup2(id, groupid, group2_name) VALUES (@id, @groupid, @group2_name)" SelectCommand="SELECT id, groupid, group2_name FROM m_grooup2 WHERE (groupid = 0)" UpdateCommand="UPDATE m_grooup2 SET groupid = @groupid, group2_name = @group2_name WHERE (id = @id)" OnSelecting="MySqlDataSource2_Selecting"> </asp:SqlDataSource>
回答
-
LISTVIEW ではなくて、ListView ですよね?
あと、ご自分の環境(OS, IIS, .NET, Visual Studio のバージョン、使っているブラウザなど)を書くようにしましょう。
うるさいことを言うと思われるかもしれませんが、このような開発者のフォーラムで他人に質問する以上、きちんと書いていただければと思います。
> 一応、CommandName="Select"とした選択ボタンを作り、SelectedIndexChanged イベントが
> 発生することはわかったのですがここから各列のアイテムを取得する方法がわかりません。「選択ボタン」をクリックした時、そのボタンの配置されている列の id, groupid, group2_name の値を取得したいのですよね?
であれば、「選択ボタン」をクリックすると ListView.ItemDataBound イベントが発生するはずなので(確認してください)、そのハンドラで、引数の ListViewItemEventArgs オブジェクトから取得するのがいいと思います。
ListView.ItemDataBound イベント
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listview.itemdatabound(v=vs.110).aspx- 回答としてマーク hys73 2014年2月9日 11:49
すべての返信
-
LISTVIEW ではなくて、ListView ですよね?
あと、ご自分の環境(OS, IIS, .NET, Visual Studio のバージョン、使っているブラウザなど)を書くようにしましょう。
うるさいことを言うと思われるかもしれませんが、このような開発者のフォーラムで他人に質問する以上、きちんと書いていただければと思います。
> 一応、CommandName="Select"とした選択ボタンを作り、SelectedIndexChanged イベントが
> 発生することはわかったのですがここから各列のアイテムを取得する方法がわかりません。「選択ボタン」をクリックした時、そのボタンの配置されている列の id, groupid, group2_name の値を取得したいのですよね?
であれば、「選択ボタン」をクリックすると ListView.ItemDataBound イベントが発生するはずなので(確認してください)、そのハンドラで、引数の ListViewItemEventArgs オブジェクトから取得するのがいいと思います。
ListView.ItemDataBound イベント
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listview.itemdatabound(v=vs.110).aspx- 回答としてマーク hys73 2014年2月9日 11:49
-
教授頂きありがとうございます。
環境はwindows8、VS2012(C#)、GoogleChromeで、
現在はまだローカルPCでのみ行っております。
浅学なためもう少し教授頂きたいのですが、
>LISTVIEW ではなくて、ListView ですよね?
大文字のLISTVIEWでは別のコントロールの意味になるのでしょうか?
>であれば、「選択ボタン」をクリックすると ListView.ItemDataBound イベントが発生するはずなので
>(確認してください)、そのハンドラで、引数の ListViewItemEventArgs オブジェクトから取得する
>のがいいと思います。
教授頂いたとおり下記のようにすることで、取得できたのですが、
SelectedIndexChangedイベントでは取れないということなのでしょうか。
また、ListView.ItemDataBound イベントですと編集ボタンなどででも
同イベント内に入るのですが、選択ボタンの時のみとするのであれば
別途、ListView.ItemCommandなどで、フラグを分けるなどする必要があるのでしょうか。protected void ListView2_ItemDataBound(object sender, ListViewItemEventArgs e) { Label idLabel; Label groupidLabel; Label group2_nameLabel; if (e.Item.ItemType == ListViewItemType.DataItem) { idLabel = (Label)e.Item.FindControl("idLabel"); groupidLabel = (Label)e.Item.FindControl("groupidLabel"); group2_nameLabel = (Label)e.Item.FindControl("group2_nameLabel"); Debug.WriteLine(idLabel.Text); Debug.WriteLine(groupidLabel.Text); Debug.WriteLine(group2_nameLabel.Text); } }
-
> 大文字のLISTVIEWでは別のコントロールの意味になるのでしょうか?
少なくとも ASP.NET のサーバーコントロールは ListView です。LISTVIEW というのは存在しません。開発者ならコンパイラ並みにそのあたりには敏感なはずです。
はっきり言わせていただければ、LISTVIEW とか平気で書く人は、一事が万事そういう調子で、全てがイイカゲンではないかと言う印象を、少なくとも自分は持ちます。
このフォーラムを見ていただければ分かると思いますが、ある程度のレベルの人ならそういう書き方をしている人はいないはずです。
もう少し謙虚に耳を傾けてはいかがですか?
-