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

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

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

Re[2]: オーバライドしたPaintメソッドから随時セル値参照するには


(過去ログ 130 を表示中)

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

■76799 / inTopicNo.1)  オーバライドしたPaintメソッドから随時セル値参照するには
  
□投稿者/ まさ (4回)-(2015/08/18(Tue) 15:43:39)

分類:[C#] 

オーバライドしたPaintメソッド中で、DataGridView同列の最大値を取得することを考えています。

随時、追加されていく行を考慮して、最大値(列の値)を取得するには、どのようにする必要があるでしょうか?

メソッドから参照すると、後から追加されたレコードが対象範囲から外れてしまします。
引用返信 編集キー/
■76801 / inTopicNo.2)  Re[1]: オーバライドしたPaintメソッドから随時セル値参照するには
□投稿者/ 魔界の仮面弁士 (449回)-(2015/08/18(Tue) 16:06:55)
No76799 (まさ さん) に返信
> オーバライドしたPaintメソッド中で、DataGridView同列の最大値を取得することを考えています。

描画系のメソッド/イベントは多数ありますが、どれのことでしょうか?
 DataGridView.OnRowPrePaint
 DataGridView.OnRowPostPaint
 DataGridView.OnCellPainting
 DataGridViewCell.Paint


DataGridView には多数のセルがあり、スクロールや列幅変更などで頻繁に描き変わります。
そのため、セル内の描画中に他のセルの値を参照しようとすると、その部分が
ボトルネックとなり、パフォーマンスを下げてしまうことがありますので注意して下さい。


> 随時、追加されていく行を考慮して、最大値(列の値)を取得するには、どのようにする必要があるでしょうか?
DataSet をバインドしているなら、あらかじめ、
式列(expression column)を追加しておくのは如何でしょう。

dataTable1.Columns.Add("最終更新日", typeof(DateTime), "MAX(更新日)");
dataTable1.Columns.Add("最大販売額", typeof(decimal), "MAX(販売額)");


あるいは、Compute メソッドや LINQ で算出しても良いですけど。
 maxCost = dataTable1.Compute("MAX(販売額)", "");
引用返信 編集キー/
■76803 / inTopicNo.3)  Re[2]: オーバライドしたPaintメソッドから随時セル値参照するには
□投稿者/ 魔界の仮面弁士 (450回)-(2015/08/18(Tue) 16:40:50)
No76801 (魔界の仮面弁士) に追記
> ■No76799 (まさ さん) に返信
>>オーバライドしたPaintメソッド中で、DataGridView同列の最大値を取得することを考えています。
> 描画系のメソッド/イベントは多数ありますが、どれのことでしょうか?

先ほどの質問の続きで、下記の 1707.zip のことでしょうか。
http://internetcom.jp/developer/20071211/26.html


> メソッドから参照すると、後から追加されたレコードが対象範囲から外れてしまします。

「後から追加されたレコードが対象範囲から外れる」とのことですが、
現在の処理は、どういったコードになっているのでしょうか。
現状の処理が分からないことには、訂正案の出しようがありません…。


また、現在必要としているのは、どの段階のデータでしょうか?

とりあえず、データバインドを行っている場合と仮定すると、
DataGridView に追加したばかりの行は、DataTable にはまだ反映されていない状態です。
(DataGridViewRow 側から、DataBoundItem でアクセスすることはできますが)

また、入力している最中のデータは、DataGridView.EditingControl.Text 等には
反映されるでしょうが、そのセルでの編集を終えるまでは、入力値が
DataGridViewCell には反映されていない可能性があります。(コントロールにもよりますが)
引用返信 編集キー/
■76867 / inTopicNo.4)  Re[2]: オーバライドしたPaintメソッドから随時セル値参照するには
□投稿者/ ??? (2回)-(2015/08/24(Mon) 21:08:09)
No76801 (魔界の仮面弁士 さん) に返信
> DataGridView には多数のセルがあり、スクロールや列幅変更などで頻繁に描き変わります。
> そのため、セル内の描画中に他のセルの値を参照しようとすると、その部分が
> ボトルネックとなり、パフォーマンスを下げてしまうことがありますので注意して下さい。

このアドバイスが参考になりました。
余りに処理が遅すぎたため、DataGridViewとは別に数値の管理をすることで解決しました。


仕事が忙しくなり、作業が中断していましたが、無事解決しました。ありがとうございます。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -