C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: GridViewのフッター合計


(過去ログ 85 を表示中)

[トピック内 19 記事 (1 - 19 表示)]  << 0 >>

■50647 / inTopicNo.1)  GridViewのフッター合計
  
□投稿者/ 初心者mania (1回)-(2010/06/14(Mon) 11:33:09)

分類:[ASP.NET (VB)] 

お世話になります
GridViewのフッタに合計を出したいのですが分からずお教え願います
参考URLhttp://www.atmarkit.co.jp/fdotnet/dotnettips/987gridviewfootavg/gridviewfootavg.html

' 単価の合計値を格納するための変数
Dim sum As Integer = 0

' データ・バインド時に呼び出されるイベント・ハンドラ
Protected Sub grid_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)

' 現在行の種類によって処理を分岐
Select e.Row.RowType

' (1)現在行がデータ行である場合、price列の値を加算
Case DataControlRowType.DataRow
Dim row = DirectCast(e.Row.DataItem, DataRowView)
sum += row.Item("price")

' (2)現在行がフッタ行である場合、
' 合計値÷行数で平均値を求め、表示
Case DataControlRowType.Footer
e.Row.Cells(3).Text = "平均:" & (sum / grid.Rows.Count)
End Select
End Sub


・分からないこと
Dim row = DirectCast(e.Row.DataItem, DataRowView)←この部分でエラーが出るのですがどうすれば回避できますか?
引用返信 編集キー/
■50650 / inTopicNo.2)  Re[1]: GridViewのフッター合計
□投稿者/ みきぬ (922回)-(2010/06/14(Mon) 11:45:46)
情報共有リンク。
http://ap.atmarkit.co.jp/bbs/core/vblab/22498

> Dim row = DirectCast(e.Row.DataItem, DataRowView)←この部分でエラーが出るのですがどうすれば回避できますか?

何のエラーか知らないけど、とりあえず e.Row.DataItem に何が入っているか確認すれば?

ASP.NET を何年やってるかは私にはわかりませんが、
何年も質問をやっていることは私にもわかるので、せめて質問の初心者からは卒業してもらいたいものですが。
引用返信 編集キー/
■50651 / inTopicNo.3)  Re[2]: GridViewのフッター合計
□投稿者/ 初心者mania (3回)-(2010/06/14(Mon) 12:02:29)
No50650 (みきぬ さん) に返信
> 情報共有リンク。
> http://ap.atmarkit.co.jp/bbs/core/vblab/22498
>
>> Dim row = DirectCast(e.Row.DataItem, DataRowView)←この部分でエラーが出るのですがどうすれば回避できますか?
>
> 何のエラーか知らないけど、とりあえず e.Row.DataItem に何が入っているか確認すれば?
>
> ASP.NET を何年やってるかは私にはわかりませんが、
> 何年も質問をやっていることは私にもわかるので、せめて質問の初心者からは卒業してもらいたいものですが。

お返事ありが等ございます

あちらのサイトは質問をスルーされているようなので離れました

本題ですが
エラー内容は'型'DataRowViewが定義されていません。とでます
又、e.Row.DataItem に何が入っているか確認する方法はありますか?
引用返信 編集キー/
■50652 / inTopicNo.4)  Re[3]: GridViewのフッター合計
□投稿者/ ごう (114回)-(2010/06/14(Mon) 12:15:28)
No50651 (初心者mania さん) に返信
> 又、e.Row.DataItem に何が入っているか確認する方法はありますか?


デバッグの仕方は、ここを参考にしてください。(C#ですが、VBも似たようなものです。)
ブレークポイントを使って、e.Row.DataItemに入っている値を確認することが出来ます。

http://journal.mycom.co.jp/articles/2008/08/18/debug/index.html


以上、参考までに。
引用返信 編集キー/
■50653 / inTopicNo.5)  Re[4]: GridViewのフッター合計
□投稿者/ 初心者mania (4回)-(2010/06/14(Mon) 12:35:39)
No50652 (ごう さん) に返信
> ■No50651 (初心者mania さん) に返信
>>又、e.Row.DataItem に何が入っているか確認する方法はありますか?
>
>
> デバッグの仕方は、ここを参考にしてください。(C#ですが、VBも似たようなものです。)
> ブレークポイントを使って、e.Row.DataItemに入っている値を確認することが出来ます。
>
> http://journal.mycom.co.jp/articles/2008/08/18/debug/index.html
>
>
> 以上、参考までに。

はい、ありがとうございます
[デバッグ]メニューの[デバッグ開始](F5キー)からプログラムを開始してみましょう。
のところで実行すると
コンパイル エラー メッセージ: BC30002: 型 'DataRowView' が定義されていません。
とでて先に進めません。-q
引用返信 編集キー/
■50654 / inTopicNo.6)  Re[5]: GridViewのフッター合計
□投稿者/ マサヤ (18回)-(2010/06/14(Mon) 12:56:33)
ASP.NETのデザイナ(GridViewの部分のみ)のところとDataBindしているところのサーバ側のコードを書いていただいたほうが答えやすいと思います。
引用返信 編集キー/
■50655 / inTopicNo.7)  Re[5]: GridViewのフッター合計
□投稿者/ ごう (115回)-(2010/06/14(Mon) 13:50:21)
No50653 (初心者mania さん) に返信
> ■No50652 (ごう さん) に返信
>>■No50651 (初心者mania さん) に返信
> >>又、e.Row.DataItem に何が入っているか確認する方法はありますか?
>>
>>
>>デバッグの仕方は、ここを参考にしてください。(C#ですが、VBも似たようなものです。)
>>ブレークポイントを使って、e.Row.DataItemに入っている値を確認することが出来ます。
>>
>>http://journal.mycom.co.jp/articles/2008/08/18/debug/index.html
>>
>>
>>以上、参考までに。
>
> はい、ありがとうございます
> [デバッグ]メニューの[デバッグ開始](F5キー)からプログラムを開始してみましょう。
> のところで実行すると
> コンパイル エラー メッセージ: BC30002: 型 'DataRowView' が定義されていません。
> とでて先に進めません。-q


じゃ、そのコンパイルエラーを修正することが先決ですね。

引用返信 編集キー/
■50658 / inTopicNo.8)  Re[6]: GridViewのフッター合計
□投稿者/ マサヤ (20回)-(2010/06/14(Mon) 15:08:36)
これでいいんじゃないですか?
c#ですが。。。

【ASP.NET】
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound" AutoGenerateColumns="False" ShowFooter="True">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="ID" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Name" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Price" runat="server" Text='<%# Eval("Price") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
【C#】
protected void Page_Load(object sender, EventArgs e)
{
DataTable dtTest = new DataTable();

dtTest.Columns.Add("ID", typeof(Int32));
dtTest.Columns.Add("Name", typeof(String));
dtTest.Columns.Add("Price", typeof(Int32));

DataRow drAdd;

for(int i=1;i<=10;i++)
{
drAdd = dtTest.NewRow();

drAdd["ID"] = i;
drAdd["Name"] = "abc" + i.ToString();
drAdd["Price"] = i*100;

dtTest.Rows.Add(drAdd);
}
GridView1.DataSource = dtTest;
GridView1.DataBind();
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
int sumNum = 0;
string val = "";
foreach(GridViewRow row in GridView1.Rows)
{
val = ((Label)row.FindControl("Price")).Text;
sumNum += Int32.Parse(val);
}

if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells[2].Text = "平均" + (sumNum/GridView1.Rows.Count).ToString();
}
}


引用返信 編集キー/
■50659 / inTopicNo.9)  Re[6]: GridViewのフッター合計
□投稿者/ 初心者mania (5回)-(2010/06/14(Mon) 16:59:45)
No50654 (マサヤ さん) に返信
> ASP.NETのデザイナ(GridViewの部分のみ)のところとDataBindしているところのサーバ側のコードを書いていただいたほうが答えやすいと思います。

お返事有難うございます
現状と加工はしましたがコードを貼り付けます
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="#CCCCCC"
BorderColor="#999999" BorderStyle="Solid" BorderWidth="3px" CellPadding="1" DataSourceID="SqlDataSource1" Font-Size="XX-Small" ForeColor="Black"
Width="780px" AllowSorting="True" AllowPaging="True" Height="1px" PageSize="30" ShowFooter="True" DataKeyNames="ID">
<RowStyle BackColor="White" />

<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="訪問チェック" HeaderText="チェック" SortExpression="訪問チェック" />
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
<asp:BoundField DataField="番号" HeaderText="番号" SortExpression="番号" />
<asp:BoundField DataField="区分" HeaderText="区分" SortExpression="区分" />
<asp:BoundField DataField="日付" HeaderText="日付" SortExpression="日付" DataFormatString="{0: yyyy/MM/dd}" />
<asp:BoundField DataField="column1" HeaderText="個人名" SortExpression="column1" />
<asp:BoundField DataField="column2" HeaderText="企業名" SortExpression="column2" />
<asp:BoundField DataField="契約者番号" HeaderText="電番" SortExpression="契約者番号" />
<asp:BoundField DataField="訪問" HeaderText="訪問" SortExpression="訪問" />
<asp:BoundField DataField="辞退" HeaderText="辞退" SortExpression="辞退" />
<asp:BoundField DataField="企業" HeaderText="企業" SortExpression="企業" />
<asp:BoundField DataField="記事" HeaderText="記事" SortExpression="記事" />
</Columns>

<FooterStyle BackColor="#CCCCCC" Font-Size="XX-Small" ForeColor="Black" />

<PagerStyle BackColor="#CCCCCC" ForeColor="Black" HorizontalAlign="Left" />
<SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="Gold" Font-Bold="True" ForeColor="Black" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\192.168.1.1\共有\DB\DB\DB.mdb"
ProviderName="System.Data.OleDb" SelectCommand="SELECT ID, 区分, 訪問チェック, 企業, 訪問, 辞退, 記事, [個人:氏名(漢字)] AS column1, [法人:会社名(漢字)] AS column2, 日付, 契約者電話番号, 番号, ID FROM データーベース WHERE ((訪問チェック LIKE '%' + @param1 + '%') OR (訪問チェック IS NULL AND @param1 = '')) AND (日付 >= IIf(IsDate(@StartDate) = False, Null, @StartDate) OR IsDate(@StartDate) = False) AND (日付 <= IIf(IsDate(@EndDate) = False, Null, @EndDate) or IsDate(@EndDate) = False) ORDER BY SO工事予約日付日付 DESC" OnSelected="SqlDataSource1_Selected">

<SelectParameters>
<asp:ControlParameter ControlID="TextBox3" ConvertEmptyStringToNull="False" Name="?"
PropertyName="Text" />
<asp:ControlParameter ControlID="TextBox1" ConvertEmptyStringToNull="False" Name="?"
PropertyName="Text" />
<asp:ControlParameter ControlID="TextBox2" ConvertEmptyStringToNull="False" Name="?"
PropertyName="Text" />
</SelectParameters>


</asp:SqlDataSource>
引用返信 編集キー/
■50660 / inTopicNo.10)  Re[6]: GridViewのフッター合計
□投稿者/ 初心者mania (6回)-(2010/06/14(Mon) 17:01:41)
2010/06/14(Mon) 17:06:04 編集(投稿者)
2010/06/14(Mon) 17:06:01 編集(投稿者)

No50655 (ごう さん) に返信
> ■No50653 (初心者mania さん) に返信
>>■No50652 (ごう さん) に返信
> >>■No50651 (初心者mania さん) に返信
>>>>又、e.Row.DataItem に何が入っているか確認する方法はありますか?
> >>
> >>
> >>デバッグの仕方は、ここを参考にしてください。(C#ですが、VBも似たようなものです。)
> >>ブレークポイントを使って、e.Row.DataItemに入っている値を確認することが出来ます。
> >>
> >>http://journal.mycom.co.jp/articles/2008/08/18/debug/index.html
> >>
> >>
> >>以上、参考までに。
>>
>>はい、ありがとうございます
>>[デバッグ]メニューの[デバッグ開始](F5キー)からプログラムを開始してみましょう。
>>のところで実行すると
>>コンパイル エラー メッセージ: BC30002: 型 'DataRowView' が定義されていません。
>>とでて先に進めません。-q
>
>
> じゃ、そのコンパイルエラーを修正することが先決ですね。
>

はい、はじめから申し上げているのですがどのように修正すればよいですか?
ヒント、手がかり等なんでもかまいません
m(__)m
引用返信 編集キー/
■50661 / inTopicNo.11)  Re[7]: GridViewのフッター合計
□投稿者/ 初心者mania (7回)-(2010/06/14(Mon) 17:07:31)
No50658 (マサヤ さん) に返信
> これでいいんじゃないですか?
> c#ですが。。。
>
> 【ASP.NET】
> <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound" AutoGenerateColumns="False" ShowFooter="True">
> <Columns>
> <asp:TemplateField>
> <ItemTemplate>
> <asp:Label ID="ID" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
> </ItemTemplate>
> </asp:TemplateField>
> <asp:TemplateField>
> <ItemTemplate>
> <asp:Label ID="Name" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
> </ItemTemplate>
> </asp:TemplateField>
> <asp:TemplateField>
> <ItemTemplate>
> <asp:Label ID="Price" runat="server" Text='<%# Eval("Price") %>'></asp:Label>
> </ItemTemplate>
> </asp:TemplateField>
> </Columns>
> </asp:GridView>
> 【C#】
> protected void Page_Load(object sender, EventArgs e)
> {
> DataTable dtTest = new DataTable();
>
> dtTest.Columns.Add("ID", typeof(Int32));
> dtTest.Columns.Add("Name", typeof(String));
> dtTest.Columns.Add("Price", typeof(Int32));
>
> DataRow drAdd;
>
> for(int i=1;i<=10;i++)
> {
> drAdd = dtTest.NewRow();
>
> drAdd["ID"] = i;
> drAdd["Name"] = "abc" + i.ToString();
> drAdd["Price"] = i*100;
>
> dtTest.Rows.Add(drAdd);
> }
> GridView1.DataSource = dtTest;
> GridView1.DataBind();
> }
>
> protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
> {
> int sumNum = 0;
> string val = "";
> foreach(GridViewRow row in GridView1.Rows)
> {
> val = ((Label)row.FindControl("Price")).Text;
> sumNum += Int32.Parse(val);
> }
>
> if (e.Row.RowType == DataControlRowType.Footer)
> {
> e.Row.Cells[2].Text = "平均" + (sumNum/GridView1.Rows.Count).ToString();
> }
> }
>
>
Cですか・・
VB変換のURL教えて頂いたのですが・・・・
引用返信 編集キー/
■50662 / inTopicNo.12)  Re[7]: GridViewのフッター合計
□投稿者/ マサヤ (21回)-(2010/06/14(Mon) 17:10:34)
2010/06/14(Mon) 17:12:12 編集(投稿者)

とりあえず、突っ込みどころとしましては
grid_RowDataBound のイベントがGridViewのプロパティに登録されてません。

>Cですか・・
>VB変換のURL教えて頂いたのですが・・・・
CではなくC#です。ほぼVB.NEETと同じです。
引用返信 編集キー/
■50664 / inTopicNo.13)  Re[3]: GridViewのフッター合計
□投稿者/ いしだ (232回)-(2010/06/14(Mon) 17:17:14)
2010/06/14(Mon) 17:20:45 編集(投稿者)

> エラー内容は'型'DataRowViewが定義されていません。とでます

ひょっとして実行時エラーではなく、コンパイルすら通らないって事でしょうか?
DataRowView -> Data.DataRowView
としたらどうでしょうか?

編集)
コンパイルエラーと書いてありましたね。。。

引用返信 編集キー/
■50665 / inTopicNo.14)  Re[8]: GridViewのフッター合計
□投稿者/ 初心者mania (8回)-(2010/06/14(Mon) 17:23:07)
No50662 (マサヤ さん) に返信
> 2010/06/14(Mon) 17:12:12 編集(投稿者)
>
> とりあえず、突っ込みどころとしましては
> grid_RowDataBound のイベントがGridViewのプロパティに登録されてません。
>
> >Cですか・・
> >VB変換のURL教えて頂いたのですが・・・・
> CではなくC#です。ほぼVB.NEETと同じです。
お返事ありがとうございます
> とりあえず、突っ込みどころとしましては
> grid_RowDataBound のイベントがGridViewのプロパティに登録されてません。
これはGridViewのコントロールのプログラム名ですよね?
あとpriceを訪問に変更しています

引用返信 編集キー/
■50666 / inTopicNo.15)  Re[4]: GridViewのフッター合計
□投稿者/ 初心者mania (9回)-(2010/06/14(Mon) 17:26:29)
No50664 (いしだ さん) に返信
> 2010/06/14(Mon) 17:20:45 編集(投稿者)
>
>>エラー内容は'型'DataRowViewが定義されていません。とでます
>
> ひょっとして実行時エラーではなく、コンパイルすら通らないって事でしょうか?
> DataRowView -> Data.DataRowView
> としたらどうでしょうか?
>
> 編集)
> コンパイルエラーと書いてありましたね。。。
>

はい私もかれこれ50回くらいはData.DataRowViewに変更して色々さわっているのですが・・・
これならエラーもなく合計表示も無く通常に表示はしてくれます
引用返信 編集キー/
■50667 / inTopicNo.16)  Re[5]: GridViewのフッター合計
□投稿者/ いしだ (233回)-(2010/06/14(Mon) 17:30:12)
2010/06/14(Mon) 17:39:51 編集(投稿者)

> はい私もかれこれ50回くらいはData.DataRowViewに変更して色々さわっているのですが・・・
> これならエラーもなく合計表示も無く通常に表示はしてくれます

では、合計表示の部分が間違っているのではないでしょうか?
例えば、
Dim sum As Integer = 0
の部分を
grid_RowDataBound
の中に書いてしまっているとか。
grid_RowDataBoundの部分のソースをのせられますか?

編集)
grid_RowDataBoundを登録してないのが正解っぽいですね。。。
引用返信 編集キー/
■50669 / inTopicNo.17)  Re[4]: GridViewのフッター合計
□投稿者/ マサヤ (22回)-(2010/06/14(Mon) 17:31:56)
2010/06/14(Mon) 17:36:19 編集(投稿者)

>これはGridViewのコントロールのプログラム名ですよね?
ここをみてください
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview_members(VS.80).aspx
で、自分のプログラムにはGridViewに
OnRowDataBound="GridView1_RowDataBound"
というプロパティを登録してるのがわかりますか?
これはデザイナのところでGridViewのプロパティ → RowDataBound をダブルクリック
でできます。

grid_RowDataBoundの中身にブレークポイントをつけて、そこを通っているかを確認してください。
引用返信 編集キー/
■50672 / inTopicNo.18)  Re[5]: GridViewのフッター合計
□投稿者/ 初心者mania (11回)-(2010/06/14(Mon) 20:42:07)
2010/06/15(Tue) 00:03:06 編集(投稿者)
2010/06/15(Tue) 00:03:01 編集(投稿者)
2010/06/14(Mon) 22:12:24 編集(投稿者)
2010/06/14(Mon) 21:03:27 編集(投稿者)
2010/06/14(Mon) 21:03:23 編集(投稿者)
No50669 (マサヤ さん) に返信
> 2010/06/14(Mon) 17:36:19 編集(投稿者)
>
> >これはGridViewのコントロールのプログラム名ですよね?
> ここをみてください
> http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview_members(VS.80).aspx
> で、自分のプログラムにはGridViewに
> OnRowDataBound="GridView1_RowDataBound"
> というプロパティを登録してるのがわかりますか?
> これはデザイナのところでGridViewのプロパティ → RowDataBound をダブルクリック
> でできます。
>
> grid_RowDataBoundの中身にブレークポイントをつけて、そこを通っているかを確認してください。

私のような初心者に真剣に取り組み頂き真に有難う御座います
自分のGridviewにOnRowDataBound="GridView1_RowDataBound"が登録されていませんでした
私のような初心者様のために
<asp:GridView ID="grid" runat="server" AutoGenerateColumns="False" BackColor="#CCCCCC"BorderColor="#999999" BorderStyle="Solid" BorderWidth="3px" CellPadding="1" DataSourceID="SqlDataSource1" Font-Size="XX-Small" ForeColor="Black"
Width="780px" AllowSorting="True" AllowPag ing="True" Height="1px" PageSize="30"
ShowFooter="True" DataKeyNames="ID" OnRowDataBound="GridView1_RowDataBound">←最後のこの部分でした

しかしながら問題点が複数でました
問題点1
空白行が一つでもあるとエラーが発生します
演算子 '+' は 型 'Integer' と 型 'DBNull' に対して定義されていません。

問題点2(解決しました)
複数設置をしたいのですが下記のように変更してもprice列とprice2列を合計した値を表示してしまいます
Case DataControlRowType.DataRow
Dim row = DirectCast(e.Row.DataItem, DataRowView)
sum += row.Item("price")
sum1 += row.Item("price2")


Case DataControlRowType.Footer
e.Row.Cells(3).Text = (sum)
e.Row.Cells(4).Text = (sum)
End Select
End Sub
問題点2は先ほど解決しました下記
Dim sum As Integer = 0
Dim sum1 As Integer = 0

Case DataControlRowType.DataRow
Dim row = DirectCast(e.Row.DataItem, DataRowView)
sum += row.Item("price")
sum1 += row.Item("price2")


Case DataControlRowType.Footer
e.Row.Cells(3).Text = (sum)
e.Row.Cells(4).Text = (sum1)
End Select
End Sub

問題点3
1ページごとの合計ではなく複数ページの合計表示させたい

問題点4
できればテキストボックスやラベルに表示させたい

もう少しのご教授お願い申し上げます
引用返信 編集キー/
■50694 / inTopicNo.19)  Re[6]: GridViewのフッター合計
□投稿者/ マサヤ (24回)-(2010/06/15(Tue) 09:16:36)
問題1
下記URLのtryParseを使って逐一、値を評価する
http://www.atmarkit.co.jp/fdotnet/dotnettips/408tryparse/tryparse.html
もしくは三項演算子を使用してDBNullの場合は0を入れるようにする

問題3
ちょっとわかりづらいです。もっと詳しくお願いします。

問題4
sum(string)をグローバル変数にして
Label1.Text = sum.Trim();
でいいのでは?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -