DataGridView を取得して、「新しい行を挿入」行を最後の行ではなくグリッドの最初の行としてレンダリングしようとしています。どうすればそれを行うことができますか? コントロールでも可能ですか?
7 に答える
「新しい行」の行をデータグリッドの一番上に移動する方法はないと思います。
しかし、一番上の行を空のままにし、データが入力されたときに必要に応じて行を下に移動するとどうなるでしょうか? つまり、グリッドの最初の行である独自の「新しい行」行を作成し、編集が終了したら上に新しい空白行を追加します。
Dim myrow = existingDataTable.NewRow
existingDataTable.Rows.Add(myrow)
adp.Fill(existingDataTable)
With DataGridView1
.DataSource =existingDataTable
End With
バインドされたコントロールを使用していない場合、dgvItems.Rows.Insert( ) を使用すると、行を挿入する場所を指定できます。
バインドされた datagridview を使用している場合、並べ替えをアクティブにせずに、新しい行をデータ ソースの目的の場所に追加します。
BoundTable.Rows.InsertAt(BoundTable.Rows.NewRow(), RowLocation);
興味深い関係を見つけました。現在の行に編集があり、その行がデータソースにコミットされていない (つまり、データの入力を開始したばかりである) 場合、アクティブなセルを別の行に移動してコミットする必要があるようです。行を挿入する前の変更。
While-E が言ったように、Insert
代わりに を使用しAdd
ます。このようにして、新しいレコードを追加する場所を指定できます。グリッドの上に新しいレコードを追加するには、 を使用するだけInsert(0)
です。
DataGridView1.Rows.Insert(0)
これにより、常に上に新しいレコードが追加されます
DataGridView1.Rows(0).Cells(n).Value = "abc"
これにより、n列に値が設定されます
RowDataBound イベントを使用していますか? その場合、列ヘッダー行をバインドしているかどうかを確認し、そのすぐ下に行を挿入する適切なコードを追加できます。
そうすれば、コンテンツ行がバインドされている場合、項目インデックスが関係していても混乱することはありませんが、念のため DataKeys などを使用することをお勧めします。さらに、RowDatabound イベントを使用すると、ユーザーが GridView 内の別の行ブロックにページングするときに、"挿入行" を使用できるようになります。
既存のすべての行よりも小さい一時的な値を新しい行のキーに割り当てることができますか? 次に、そのキーで DataView を並べ替え、ビューをグリッドにバインドします。
私のチームは、その行がデータベースに挿入されるまで、行 ID として負の数を使用します。新しい行が一番上に表示された覚えはありませんが、それも要件としてありません。
そして、他のすべてが失敗した場合、ハッキーな方法は、既存のものの上に別の1行のDataGridViewを配置し、その列を複製し、行送信イベントを結び付けてデータを下に追加することです:)
新しい行を追加したい場合、デフォルトのようにテーブルの下部ではなく、実際にテーブルの上部に行を挿入したいということですか? そうであれば、並べ替えやキー値を扱う必要はありません。Insert メソッドを使用して、次のようにします。
'新しい行を作成します
Dim tmpRow = 新しい DataGridViewRow
'行を何らかの方法で調整します
tmpRow.Height = _cellRectSize
'DataGridView(つまりdgvEditor)の一番上に行を追加(index=0)
Me.dgvEditor.Rows.Insert(0, tmpRow)
私にとって魅力のように機能します。他の誰かに役立つことを願っています!