DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WinForm上でのDataGridのEnabled時不具合

環境/言語:[WinXP SP1 FrameWork1.1 VS.NET2003(C#にて開発中)]
分類:[.NET]

お世話になります。
ヒントがないかと思い、投稿しました。

   ********    *******     データグリッド(DataGrid)
   ----------  ---------    ユーザーコントロール(UserControl)
  -------------------------    ユーザーコントロール(UserControl)
 -----------------------------   タブコントロール(TabControlとTabPage)
---------------------------------- フォーム(Form)

見たいな重ねあわせでDataGridを乗せているんですが、
DataGridのEnabledをFalseにしたときに、カレントセルが
BackColor色になってしまいます
(現象中の画面をアップしてみますが、うまくいくかな?)

色だけでなく、グリッドセル内に表示されている値と違う値が
表示されているケースもあります。
DataGridに含まれているテキストボックスがいたずらしているんでしょうが、
いろいろ試しましたが、お手上げ状態です。

 この件、なにか情報がありましたらご教授いただければ、
幸いです。

 以上、よろしくお願いいたします。
(この記事にはファイル"WS000000.JPG"が添付されていましたが、削除されました。)
どういうタイミングで(きっかけで)、DataGridのEnabledをFalseに
設定しているのでしょうか?
そのあたりが関係しているかもしれません。
NowhereMan様 お世話になります。

■No4276に返信(NowhereManさんの記事)
> どういうタイミングで(きっかけで)、DataGridのEnabledをFalseに
> 設定しているのでしょうか?
> そのあたりが関係しているかもしれません。
>

 ラジオボタンのクリックイベント中です。
『参照モード』『書き込みモード』の二つのラジオボタンを
準備して、『参照モード』側のラジオが選択された場合、
他のテキストボックス等と同時にEnabledをFalseにしています。

表示されている画像のようにセル単位で色を変化させています。
ここのホームページに記載されていた
"セル単位の色の変化を行う"
http://dobon.net/vb/dotnet/datagrid/coloredcell.html
をまねして実装させています。

"セル単位の色の変化を行う"とかやってしまうと、
現象出るんでしょうか?
なるほど。タイミングより、セル色変更の方かもしれませんね。
セル色変更して簡単にやってみたのですが、再現しませんでした。
Prophetさんの例では、第1、第2カラムの色を変更していますが、
現象が発生するのは画像で示されているように第2カラムだけですか?
発生するのがセル色変更しているカラムだけか、セル色変更していないカラムも
発生するのかで、ある程度原因の切り分けができると思います。
NowhereMan様 おせわになります。

■No4279に返信(NowhereManさんの記事)
> なるほど。タイミングより、セル色変更の方かもしれませんね。
> セル色変更して簡単にやってみたのですが、再現しませんでした。
> Prophetさんの例では、第1、第2カラムの色を変更していますが、
> 現象が発生するのは画像で示されているように第2カラムだけですか?
> 発生するのがセル色変更しているカラムだけか、セル色変更していないカラムも
> 発生するのかで、ある程度原因の切り分けができると思います。

第一カラムは、見出し用(固定列みたいな感じで)でそこへは移動しないよう
コードで制御(CurrentCellChangedイベント)をかけています。
第2カラムからがデータカラムになります。異常値が入れば、赤で表示するように
例のサンプルまねて制御入れています。

データを読み込んだあと、セル位置を、左上隅に移動後、
EnabledをFalseしてますんで、
このタイミングのまずさが、現象を呼んでいるようなきもしています。

なお、背景が赤くなくても(白くても)同じ、色に変化します。

なんか、仕様なんですかねぇ?
切り口を変えて、攻めたほうがいいような気もしてきました。
状況が分かりました。自分でも再現しました。
自分がやってみたところ、次のような結果になりました。

[現象が発生するパターン]
1. dataGrid1.Enabled = false;
2. dataGrid1にデータを読み込み、セルを左上隅に移動。

[現象が発生しないパターン]
1. dataGrid1.Enabled = true;
2. dataGrid1にデータを読み込み、セルを左上隅に移動。
3. dataGrid1.Enabled = false;
NowhereMan様 お世話になります。
追試、ありがとうございました。

■No4288に返信(NowhereManさんの記事)
> 状況が分かりました。自分でも再現しました。
> 自分がやってみたところ、次のような結果になりました。
>
> [現象が発生するパターン]
> 1. dataGrid1.Enabled = false;
> 2. dataGrid1にデータを読み込み、セルを左上隅に移動。
>
> [現象が発生しないパターン]
> 1. dataGrid1.Enabled = true;
> 2. dataGrid1にデータを読み込み、セルを左上隅に移動。
> 3. dataGrid1.Enabled = false;
>

 上記をまねて、コードを入れてみました。
再現率は少し低くなりましたが、やっぱり、現象出るときがあります。
現象が出ない場合は、赤色セルが大量にある場合、です。

DataGridのEnabled時の描画とセル単位の描画のタイミングが合ってない、
って雰囲気、匂ってますねぇ。。。

一応、今朝、思いついたんですが、

DataGrid g;

DataTable dt = g.DataSource as DataTable;
dt.DefaultView.AllowEdit = false;

で、入力自体の抑制は出来るんで、こいつで今回は逃げようかな、
なんて考えています。
ただ、相変わらず、BackColor色のセルが表示されてはいますが。
現場へは、運用説明で、回避できれば、と思ってます。
(現場がNGだしたら、あの高額なGridコントロール、買おうかと(涙))

もし、追加情報がございましたら、お暇なときでいいんで、
記述いただけると幸いです。

まだ、本件は、未解決ですが、
お忙しいところ、お手を煩わせ、いろいろとありがとうございました。

DOBON.NET | プログラミング道 | プログラミング掲示板