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

DataGridで選択されたセルが新規入力行かどうか

環境/言語:[Windows2000]
分類:[.NET]

DataGridで選択されたセルが新規入力行(*マーク)かどうか
判断することは可能でしょうか?

ヘルプやgooなど探してみたのですが・・・見つかりません。

御存知の方 教えて下さい!
> DataGridで選択されたセルが新規入力行(*マーク)かどうか
> 判断することは可能でしょうか?

・・・、ひょっとしてCentureのグリッドかなにかを元にそのように
おっしゃってます?

ハズしてましたら無視してください・・ハイ。。。
(フォーカスが行くと*マークはなくなるはずですが、まぁ曲解して、)
「新しい行に入力後、まだその行から他の行への移動等、確定動作をしていない状態であるか
どうかを調べたい」ということであれば、そのDataGridのソースに指定しているDataTableで
カレントになっている行の、行状態を調べればすぐに分かります。

なお、DataGridのインデックスは直接DataTableの行インデックスと対応づいていませんので、
カレントになっている行を知るには、CurrencyManagerを使用する必要があります。

また、行からフォーカスが外れると「鉛筆マーク...」がなくなり、キャンセルか追加確定
どちらかの状態になってしまうので、Grid内コントロール(DataGridTextBoxColumn等の列指定
のクラスが持つ内部コントロール)に付けたイベント等で扱う必要があります。
(調べようとして、グリッドの外にあるボタン等を押した時点で、行の操作は追加確定もしくは
キャンセル(何も打たずに抜けた場合)になります。)

参考までに
If e.KeyCode = Keys.F1 Then
    Dim cm As CurrencyManager
    cm = CType(Me.BindingContext(DataGrid1.DataSource), CurrencyManager)
    Label1.Text=cm.Position.ToString
    Dim rv As DataRowView = cm.Current
    Dim r As DataRow = rv.Row
    Label2.Text=r.RowState.ToString
End If

行の状態に関しては、
マニュアルで"DataRowState 列挙体"を見てください。
どれが、作成後でかつ、まだ追加もされていない宙ぶらりんな状態なのか、すぐ分かると思います。

CurrencyManagerは回りくどいと思われるかもしれませんが、データとコントロールを
うまくバインドするための.NET上の実装だと思ってください。

必要な知識:
    CurrencyManager
    DataGridTableStyle
    DataGridTextBoxColumn
    RowState
マニュアル当たってくださいね。

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