2009-04-15 10 views
0



は、「」にGridViewのDataSourceIdを設定し、私はSqlDataSourceコントロールにGridViewコントロールをバインドする場合は、初めてページが作成されたGridViewは

を失うことになり、GridViewのデータソースから取得した列が表示されます。私はGridView.DataSourceIDが

protected void Page_Load(object sender, EventArgs e) 
    { 
      ... 
     if (IsPostBack) 
      GridView1.DataSourceID = ""; 
      ... 
    } 

をnullまたは空の文字列にするように設定ポストバックの場合しかし、その後、GridViewのは、まったくの行は表示されません。しかし、それはなぜですか?

GridViewがEnableViewstateをtrueに設定していると仮定すると、ページが最初に作成されたときにデータソースから取得した行を表示できるはずです。 私は、フレームワークがDataSourceIdが変更され、GridViewが以前のデータソースからのデータを必要としないことをフレームワークが認識していると主張することができますが、フレームワークは空の文字列またはnull参照がデータソースおよび以前のデータソースから取得したデータを削除しませんでしたか?


EDIT


ありがとう:あなたがNULLまたはしDataSourceIDを設定した後
こんにちは、

基本的に何が起こっているのです空のストリンコントロールは、コントロールの消費者から、データをまったくバインドしないことを示す(ViewStateデータさえも)ことを指示として受け取ります。コントロールはバインディングの前にDataSourceIDをチェックし、空の文字列の場合はEnsureDataBoundメソッドでDataBindを行いません。だから、


あなたは、Page_Loadの(内部でnullにDataSourceIDを設定している場合)に、GridViewはViewStateは以前からのデータを含む、DataSourceIdがチェックされ、その後まで、(をPage_Load後くらいに起きている)は、結合前にDataSourceIdモーメントをチェックしますPage_Load()内でデータソースを使用できるようにする必要があります(たとえば、ポストバックの原因となったイベントに登録されたイベントハンドラ内でも使用できます)。

+0

私は()(をPage_Load内)NullにDataSourceIDを設定している場合、私は私の古いスレッドを検討してきた...とにかく...、その後、ポストバックに私はまだデータにアクセスすることができましたGridViewで(DataSourceIDがチェックされるまで)Label1.Text = GridView.Rows []。Cells []。Text; – SourceC

答えて

4

DataSourceIDnullまたは空の文字列に設定すると、コントロールがViewStateデータに再バインドされません。私が下にリンクしている記事は、理由について優れた説明をしています。

DataSourceIDnullに設定した後は、コントロールの消費者からの指示として、データをまったくバインドしないようにする(ViewStateデータ)。コントロールはバインドする前にDataSourceIDをチェックし、空の文字列の場合は、EnsureDataBoundメソッドではDataBindではありません。

System.What?: DataSource VS. DataSourceID (Internals)

1

私は、フレームワークは空の文字列またはnull参照 は、データ・ソース のいずれかを指していないため、以前のデータ ソースから取得した任意のデータ GridViewコントロールを削除しないであろうと を実現するだろうと仮定だろうか?

なぜあなたは値をリセットすると思いますか?もちろん、girdviewはリセットした新しい値をバインドする必要があります。

関連する問題