2

1)GridView1ObjectDataSourceにバインドされ、GridView1.SelectedIndexが値7に設定されているとします。その後、 GridView1.DataBind()を呼び出してGridView1を再バインドすると、GridView.SelectedIndexは初期値(7)を保持します。

GridViewが再バインド操作で記憶する他のプロパティはありますか?

2)GridView1がObjectDataSourceコントロールにバインドされているとします。GridView1の行が削除されたら、 GridView1.RowDeletedイベントハンドラー内でGridView1.DataBind()を呼び出して、データソースから値を取得できます。そのイベントハンドラー内でGridview1.DataBindを呼び出さない場合、 DataBind()はAsp.Netによって自動的に呼び出され、結果は同じになります。

では、Asp.Netに自動的に呼び出させるのではなく、GridView.DataBindRowDeletedイベントハンドラー内)を手動で呼び出す必要がある理由はありますか?

4

2 に答える 2

0

初心者向けの階層データバインディングについて少し説明します。
データソースをサーバー側のコントロール(GridView、DetailsViewなど)にバインドするには、そのDataSourceコントロールがDataBind()と呼ばれるプロパティとメソッドをサポートしている必要があり、コントロールがバインドされているデータソースはIEnumerableインターフェイスを実装します。

DataSetとDataTableには例外があり、どちらも直接バインドできます。その結果、デフォルトテーブルのデフォルトのDataViewにバインドされます。

データをコントロールにバインドするには、データソースをコントロールのDataSourceプロパティに割り当て、そのDataBind()メソッドを呼び出します。ソース

あなたの場合、データバインディングの状況は前述のように異なります。これは、ページの読み込み時にクエリを実行するObjectDataSourceとGridViewをバインドし、すべてのSELECT、INSERT、UPDATE、DELETE操作で、データソースが自動的にバインドされることを意味します(つまり、DataBindも自動的に呼び出されます) )。

そもそも答えを探している別のケースは、データソースがクエリされてページイベントにバインドされている場合です(つまり、何かをクエリしてDataTableで結果を取得し、それをGridViewにバインドします->このソースはこのクエリはイベントからのものであるため、pageIndexを有効にすると、もう一度クエリを実行する必要があります。これにより、DataBindでバインドする必要があります。

DataTable sourceTable = GetDataFromServer();
gridView.DataSource = sourceTable;
gridView.DataBind();

今回はご理解いただければ幸いです。

于 2009-08-19T08:08:36.757 に答える
0

あなたの答えはPage.DataBindControl.DataBindメソッドにあります。主な違いは、Page.DataBind メソッドが呼び出された後、すべてのデータ ソースがサーバー コントロールにバインドされることです。Web サーバー コントロールの DataBind メソッドを明示的に呼び出すか、ページ レベルのPage.DataBindメソッドを呼び出すまで、データはコントロールにレンダリングされません。通常、Page.DataBind (または DataBind) は Page_Load イベントから呼び出されます。 ソース

1) に対する具体的な答えは、GridView にはそのようなプロパティはありませんが、独自のプロパティを作成して、最後に変更されたコントロールを追加することができます (理想的)。

2)ここでのアクションはポストバックからのものです。デフォルトのバインドされたソースは、その中の行をすべて削除した後に変更されるためです。デフォルトのソースは再度バインドできないため、手動で DataBind を呼び出す必要があります。

于 2009-08-17T20:41:37.647 に答える