1

編集可能なテキストボックスで構成されるGridViewがあります。ユーザーが値を入力すると、OnTextChanged関数はmyUpdateColumns()メソッドを呼び出します。このメソッドは、さまざまな計算を実行し、GridView全体を変更します。ユーザー入力を数字のみに制限しているため、ユーザーが任意のセルに英字を入力すると操作がエラーになります。このエラーが発生した場合、ユーザーが英字を入力する直前に存在していたデータテーブルに戻したいと思います。

現在のGridViewのデータソースをキャプチャしてDataTableに保存する方法はありますか?

私は次のことを試しました(データテーブルがバインドされた後):

Dim dt As DataTable = DirectCast(gvBuildingBlocks.DataSource, DataTable)
Session("buildingBlocks") = dt

'If textboxes are all numeric, perform calculations here 

'Else display error here and bind table below
gvBuildingBlocks.DataSource = CType(Session("buildingBlocks"), DataTable)
gvBuildingBlocks.DataBind()

上記では、の値gvBuildingBlocks.DataSourceが空であるため、グリッドビューが空になります。値を取得するために他にできることはありますか?

次のように、すべての行をループして保存することができると思います。

For Each row As GridViewRow in gvBuildingBlocks.Rows
    'Save cell value here
Next

しかし、値を保存するためにどのコードを使用すればよいかわかりませんか?

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

2

行に対して計算を行っており、ユーザー入力が無効な場合は元の値にロールバックしたいことを理解しています。DataRow.BeginEdit()これは、編集前に呼び出しDataRow.CancelEdit()、入力が無効な場合に行レベルで実行できます。この例を参照してください

DataRow.EndEdit()編集が変更をコミットするために有効である場合は、呼び出すことを忘れないでください。

于 2013-02-18T19:38:15.847 に答える