none
LISTVIEWについて RRS feed

  • 質問

  • 初歩的な質問で申し訳ないのですが、

    データバインドで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>

    2014年2月8日 3:53

回答

  • 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
    2014年2月8日 5:45

すべての返信

  • 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
    2014年2月8日 5:45
  • 教授頂きありがとうございます。

    環境は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);
                                    
                }
    
            }

    2014年2月8日 11:29
  • > 大文字のLISTVIEWでは別のコントロールの意味になるのでしょうか?

    少なくとも ASP.NET のサーバーコントロールは ListView です。LISTVIEW というのは存在しません。開発者ならコンパイラ並みにそのあたりには敏感なはずです。

    はっきり言わせていただければ、LISTVIEW とか平気で書く人は、一事が万事そういう調子で、全てがイイカゲンではないかと言う印象を、少なくとも自分は持ちます。

    このフォーラムを見ていただければ分かると思いますが、ある程度のレベルの人ならそういう書き方をしている人はいないはずです。

    もう少し謙虚に耳を傾けてはいかがですか?

    2014年2月8日 12:08
  • ListViewをLISTVIEWと書いたことで

    気を悪くされる方がいらっしゃるということで大変失礼いたしました。



    • 編集済み hys73 2014年2月9日 11:50
    2014年2月9日 11:48
  • > ListViewをLISTVIEWと書いたことで
    >
    > 気を悪くされる方がいらっしゃるということで大変失礼いたしました。
     
    いえ、そういうことではないです。

    あなたが私のレスに対して、

    > 大文字のLISTVIEWでは別のコントロールの意味になるのでしょうか?

    と書いた意味が、「何を細かいことを言っているんだ、大文字だろうがなんだろうが見れば分かるだろう」と言っているように思えたからです。

    全くそういう意図はなかったということなら失礼しました。


    問題が解決していなければ、「回答としてマーク」は外して、質問を続けることをお勧めします。

    2014年2月9日 12:50