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

DataGridの追加行とAutoIncriment

環境/言語:[Windows2000、VB.NET .NET Framework1.1]
分類:[.NET]

はじめまして。

DBのあるテーブルの内容をDataGridで表示し、編集を可能としております。
また、行番号を表示するカラムを追加してAutoIncrimentをTrueとしております。

この時、DataGridの追加行(*印の最下行)を選択すると行番号のカラムに
自動的にインクリメントされた数値が表示されますが、
別の行を選択してから再度追加行を選択すると行番号が+2された値になります。
これを繰り返す度に+2、+3、+4とどんどん増えてしまいます。
※追加行を選択しただけなので実際には行は追加されておりません。
これを行を追加しない限り常に最老番+1の値になるようにするには
どうすればよいかご存知の方がおられましたらご教授頂ければ幸いです。

例)
・初期表示
No | Col1 | Col2
---+------+-----
1 | dt11 | dt12
2 | dt21 | dt22
* | |

・追加行選択
No | Col1 | Col2
---+------+-----
1 | dt11 | dt12
2 | dt21 | dt22
3 | |

・別の行選択
No | Col1 | Col2
---+------+-----
1 | dt11 | dt12
2 | dt21 | dt22
* | |

・再度追加行選択
No | Col1 | Col2
---+------+-----
1 | dt11 | dt12
2 | dt21 | dt22
4 | |

 ↑
行番号(No)が3になってほしい。



また、以下のように追加行に初めに入力した文字が無効になってしまう問題も
解決できませんのでご教授頂ければ幸いです。

例)
・初期表示
No | Col1 | Col2
---+------+-----
1 | dt11 | dt12
2 | dt21 | dt22
* | |

・追加行選択(追加行のCol1のセルを選択)
No | Col1 | Col2
---+------+-----
1 | dt11 | dt12
2 | dt21 | dt22
3 | |

・「d」を入力
No | Col1 | Col2
---+------+-----
1 | dt11 | dt12
2 | dt21 | dt22
3 | |
* | |

・再度「d」を入力
No | Col1 | Col2
---+------+-----
1 | dt11 | dt12
2 | dt21 | dt22
3 | d |
* | |

 ↑
一回目の「d」入力が無視されてしまう。


以上、宜しくお願い致します。
2004/11/09(Tue) 14:53:29 編集(投稿者)

#回答ではありません。

> DBのあるテーブルの内容をDataGridで表示し、編集を可能としております。
> また、行番号を表示するカラムを追加してAutoIncrimentをTrueとしております。

 編集可能とのことですが、行の削除は行わないのでしょうか?
 また、ソートなどの表操作を行うこともないのでしょうか?

 AutoIncrement は一意性が必要なときに用いるもので、連続性が必要なときに用いるものではないような気がします。
#主観ですが、行番号をデータとして持とうとすることそのものが問題ではないかと。

 なお、
> これを行を追加しない限り常に最老番+1の値になるようにするには
という処理は標準ではないと思います。
#というか、インクリメントされるのは DataRowCollection に追加されるタイミングではありません。 DataTable.NewRow が行われるタイミングでインクリメントされます。
#どうしても必要でしたら、 DataColumn.autoIncrementCurrent フィールド(プライベート メンバ)の値を書き変えれば擬似的に実現できるでしょう。
#‥‥そこまでするなら AutoIncrement にする意味がないという話もありますけど。


> また、以下のように追加行に初めに入力した文字が無効になってしまう問題も
> (後略)

 単純に作成しただけの DataGrid でしたら、そのような動作にはならないと思うのですが‥‥
何かご自身で行ってる処理が影響されてるのではないでしょうか。
 恐らく
> ・追加行選択(追加行のCol1のセルを選択)
でキャレットが表示されていない(編集状態になっていない)のでしょうけど、手掛かりがないのでお役に立てそうにありません。

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