none
list view での合計値の出し方について RRS feed

  • 質問

  • asp.net初心者です。

    ただいま、家計簿のシステムを作成中です。

    入力した金額の合計値が”合計”の右側に表示されるものを作成したいと思っているのですが、どうにもうまく動きません。以下がソースとなるのですがどのようにすれば表示されるようになるのかご教授いただけないでしょうか。

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="now.aspx.cs" Inherits="family_nowmonth_now" %>
    <%@ Import Namespace="System.Data" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


    <script runat="server">
    decimal total = 0;

    protected void ListView1_ItemDataBound(object sender,ListViewItemEventArgs e)
    {
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
    ListViewDataItem lvdi = (ListViewDataItem)e.Item;
    DataRowView drv = (DataRowView) lvdi.DataItem;
    total = total + (decimal)drv["money"];
    }
    }

    protected void ListView1_DataBound(object sender, EventArgs e)
    {
    Label label = (Label)ListView1.FindControl("totalLabel");
    label.Text = String.Format("", total);
    }
    </script>


    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ListView ID="ListView1" runat="server" DataKeyNames="buyid"
                DataSourceID="SqlDataSource1" InsertItemPosition="FirstItem">
                <AlternatingItemTemplate>
                    <tr style="background-color: #FFFFFF;color: #284775;">
                        <td>
                            <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="削除" />
                            <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="編集" />
                        </td>
                        <td>
                            <asp:Label ID="dayLabel" runat="server" Text='<%# Eval("day", "{0:yyyy/MM/dd}") %>' />
                        </td>
                        <td>
                            <asp:Label ID="moneyLabel" runat="server" Text='<%# Eval("money") %>' />
                        </td>
                        <td>
                            <asp:Label ID="tenpoLabel" runat="server" Text='<%# Eval("tenpo") %>' />
                        </td>
                        <td>
                            <asp:Label ID="buyidLabel" runat="server" Text='<%# Eval("buyid") %>' />
                        </td>
                    </tr>
                </AlternatingItemTemplate>
                <EditItemTemplate>
                    <tr style="background-color: #999999;">
                        <td>
                            <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="更新" />
                            <asp:Button ID="CancelButton" runat="server" CommandName="Cancel"
                                Text="キャンセル" />
                        </td>
                        <td>
                            <asp:TextBox ID="dayTextBox" runat="server" Text='<%# Bind("day") %>' />
                        </td>
                        <td>
                            <asp:TextBox ID="moneyTextBox" runat="server" Text='<%# Bind("money") %>' />
                        </td>
                        <td>
                            <asp:TextBox ID="tenpoTextBox" runat="server" Text='<%# Bind("tenpo") %>' />
                        </td>
                        <td>
                            <asp:Label ID="buyidLabel1" runat="server" Text='<%# Eval("buyid") %>' />
                        </td>
                    </tr>
                </EditItemTemplate>
                <EmptyDataTemplate>
                    <table runat="server"
                        style="background-color: #FFFFFF;border-collapse: collapse;border-color: #999999;border-style:none;border-width:1px;">
                        <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>
                            <asp:TextBox ID="dayTextBox" runat="server" Text='<%# Bind("day") %>' />
                        </td>
                        <td>
                            <asp:TextBox ID="moneyTextBox" runat="server" Text='<%# Bind("money") %>' />
                        </td>
                        <td>
                            <asp:TextBox ID="tenpoTextBox" runat="server" Text='<%# Bind("tenpo") %>' />
                        </td>
                        <td>
                            &nbsp;</td>
                    </tr>
                </InsertItemTemplate>
                <ItemTemplate>
                    <tr style="background-color: #E0FFFF;color: #333333;">
                        <td>
                            <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="削除" />
                            <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="編集" />
                        </td>
                        <td>
                            <asp:Label ID="dayLabel" runat="server" Text='<%# Eval("day", "{0:yyyy/MM/dd}") %>' />
                        </td>
                        <td>
                            <asp:Label ID="moneyLabel" runat="server" Text='<%# Eval("money") %>' />
                        </td>
                        <td>
                            <asp:Label ID="tenpoLabel" runat="server" Text='<%# Eval("tenpo") %>' />
                        </td>
                        <td>
                            <asp:Label ID="buyidLabel" runat="server" Text='<%# Eval("buyid") %>' />
                        </td>
                    </tr>
                </ItemTemplate>
                <LayoutTemplate>
                    <table runat="server">
                        <tr runat="server">
                            <td runat="server">
                                <table ID="itemPlaceholderContainer" runat="server" border="1"
                                    style="background-color: #FFFFFF;border-collapse: collapse;border-color: #999999;border-style:none;border-width:1px;font-family: Verdana, Arial, Helvetica, sans-serif;">
                                    <tr runat="server" style="background-color: #E0FFFF;color: #333333;">
                                        <th runat="server">
                                        </th>
                                        <th runat="server">
                                            day</th>
                                        <th runat="server">
                                            money</th>
                                        <th runat="server">
                                            tenpo</th>
                                        <th runat="server">
                                            buyid</th>
                                    </tr>
                                    <tr ID="itemPlaceholder" runat="server">
                                    </tr>
                                    <tr>
                                    <td></td>
                                    <td>合計</td>
                                    <td style="text-align: right;">
                                    <asp:Label ID="totallabel" runat="server"/></td>
                                    </tr>
                                </table>
                            </td>
                        </tr>
                        <tr runat="server">
                            <td runat="server"
                                style="text-align: center;background-color: #5D7B9D;font-family: Verdana, Arial, Helvetica, sans-serif;color: #FFFFFF">
                                <asp:DataPager ID="DataPager1" runat="server">
                                    <Fields>
                                        <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True"
                                            ShowLastPageButton="True" />
                                    </Fields>
                                </asp:DataPager>
                            </td>
                        </tr>
                    </table>
                </LayoutTemplate>
                <SelectedItemTemplate>
                    <tr style="background-color: #E2DED6;font-weight: bold;color: #333333;">
                        <td>
                            <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="削除" />
                            <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="編集" />
                        </td>
                        <td>
                            <asp:Label ID="dayLabel" runat="server" Text='<%# Eval("day") %>' />
                        </td>
                        <td>
                            <asp:Label ID="moneyLabel" runat="server" Text='<%# Eval("money") %>' />
                        </td>
                        <td>
                            <asp:Label ID="tenpoLabel" runat="server" Text='<%# Eval("tenpo") %>' />
                        </td>
                        <td>
                            <asp:Label ID="buyidLabel" runat="server" Text='<%# Eval("buyid") %>' />
                        </td>
                    </tr>
                </SelectedItemTemplate>
            </asp:ListView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server"
                ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
                DeleteCommand="DELETE FROM [kaimono01] WHERE [buyid] = @buyid"
                InsertCommand="INSERT INTO [kaimono01] ([day], [money], [tenpo]) VALUES (@day, @money, @tenpo)"
                SelectCommand="SELECT [day], [money], [tenpo], [buyid] FROM [kaimono01]"
                UpdateCommand="UPDATE [kaimono01] SET [day] = @day, [money] = @money, [tenpo] = @tenpo WHERE [buyid] = @buyid">
                <DeleteParameters>
                    <asp:Parameter Name="buyid" Type="Int32" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter DbType="Date" Name="day" />
                    <asp:Parameter Name="money" Type="Int32" />
                    <asp:Parameter Name="tenpo" Type="String" />
                </InsertParameters>
                <UpdateParameters>
                    <asp:Parameter DbType="Date" Name="day" />
                    <asp:Parameter Name="money" Type="Int32" />
                    <asp:Parameter Name="tenpo" Type="String" />
                    <asp:Parameter Name="buyid" Type="Int32" />
                </UpdateParameters>
            </asp:SqlDataSource>
        </div>
        </form>
    </body>
    </html>

      
    2012年6月17日 6:34

回答

  • コードは長すぎるので詳しく見てませんが・・・

    まず、コード分離(.aspx と .aspx.cs が別ファイル)なのに、C# のコード
    が .aspx ファイルの方にあるのが変です。

    次に、label.Text = String.Format("", total); が変です。

    このあたりを直したらどうなりますか?

    • 回答の候補に設定 山本春海 2012年6月27日 9:30
    • 回答としてマーク aquq 2012年6月30日 13:30
    2012年6月17日 10:20
  • もう一つ問題らしきところがありました。

    アップされているコードを見る限り、ListView の ItemDataBound
    イベントと DataBound イベントに、ListView1_ItemDataBound メ
    ソッドと ListView1_DataBound メソッドがアタッチされてないで
    す。

    つまり、以下のコードが見当たりません。

    OnItemDataBound="ListView1_ItemDataBound"
    OnDataBound="ListView1_DataBound"

    • 回答の候補に設定 山本春海 2012年6月27日 9:30
    • 回答としてマーク aquq 2012年6月30日 13:30
    2012年6月19日 11:26

すべての返信

  •  あなたは、あなたがしたいことを、正確にコードに書き表せているという自信をお持ちでしょうか。お持ちでないなら、このコードの要所要所で何をしたいかということを書いてください。

     また、『どうもうまく動きません』ではなく、「これこれのコードによって、このようになると思っていたところ、このような結果になった」というように、行ったこと、期待したこと、実際に起こったことを具体的に書いてください。フォーラムを常に見ていればわかることですが、実際に答えを書き込んでいるのは十数人です。その人達が、毎日膨大な投稿に対して色々考えています。投稿者のことを考えろ、とはいいません。他に質問を持っている人のことも考えてあげてください。あなた同様、彼らも困っているのです。彼らのことも考える時間を、回答者に与えてあげてください。

     もし、データが何も表示されないということなら、ASP.NET では「バインドしているデータを表示(レンダリング)する」と指示をしてやる必要があります。ここに挙げてあるコードには入っていないように思えましたので、調べることを提案します。

     あれ?script 要素って、そんなところにあって良かったっけ?


    Jitta@わんくま同盟

    • 回答の候補に設定 山本春海 2012年6月27日 9:30
    2012年6月17日 8:38
  • Jitta 様

    抽象的な表現で申し訳ございませんでした。

    ご提案いただきました「バインドしているデータを表示(レンダリング)する」について調べてみます。

    ありがとうございました。

    2012年6月17日 10:19
  • コードは長すぎるので詳しく見てませんが・・・

    まず、コード分離(.aspx と .aspx.cs が別ファイル)なのに、C# のコード
    が .aspx ファイルの方にあるのが変です。

    次に、label.Text = String.Format("", total); が変です。

    このあたりを直したらどうなりますか?

    • 回答の候補に設定 山本春海 2012年6月27日 9:30
    • 回答としてマーク aquq 2012年6月30日 13:30
    2012年6月17日 10:20
  • SurferOnWww様

    ご回答ありがとうございます。

    変だとご指摘いただいた箇所について修正を行ってみたいと思います。

    ご回答ありがとうございました。

    2012年6月17日 13:06
  • < あれ?script 要素って、そんなところにあって良かったっけ?
    html的には不正ですが、runat=serverということでASP.NETが解釈した上で削除される部分ですので問題ないかと。
    2012年6月17日 13:21
  • もう一つ問題らしきところがありました。

    アップされているコードを見る限り、ListView の ItemDataBound
    イベントと DataBound イベントに、ListView1_ItemDataBound メ
    ソッドと ListView1_DataBound メソッドがアタッチされてないで
    す。

    つまり、以下のコードが見当たりません。

    OnItemDataBound="ListView1_ItemDataBound"
    OnDataBound="ListView1_DataBound"

    • 回答の候補に設定 山本春海 2012年6月27日 9:30
    • 回答としてマーク aquq 2012年6月30日 13:30
    2012年6月19日 11:26
  • 佐祐理様、SurferOnWww様

    ご指摘いただきましてありがとうございます。

    指摘いただいた内容を確認・コードの修正するまでに時間がかかってしまいそうですが、

    進捗ありましたらご報告させていただきたいと思います。

    2012年6月24日 12:31
  • 無事に動かすことができました。

    コメントいただいた皆様方、ありがとうございました

    SurferOnWww様からご指摘いただいた下記2点の対応にて動くようになりました。

    コード分離(.aspx と .aspx.cs が別ファイル)なのに、C# のコード
    が .aspx ファイルの方にあるのが変です。

     →分離させました。

    つまり、以下のコードが見当たりません。

    OnItemDataBound="ListView1_ItemDataBound"
    OnDataBound="ListView1_DataBound"

     →追加しました。

    2012年6月30日 13:29