2010-12-01 1 views
1

私は、GridviewがポストバックにGridview.DataSourceプロパティを保持しないと言っている複数のソースを読んだことがあります。私の理解では、ASP.NETの場合、ポストバックは最初のページロードではないページロードです(MSDN参照)。Gridviewにはいつnullデータソースがありますか?

2つの非常によく似たグリッドビューの状況があります。

GvOne.DataSourceはポストバック時にnullです。
GvTwo.DataSourceはポストバック時にnullではありません。

いくつかの異なる列の外にある唯一の大きな違いは、GvOneにはEntity FrameworkとLINQが設定されていることです。 GvTwoには、SqlDataAdapterで埋められたDataTableが挿入されます。

また、GvOneとGvTwoには、ユーザー入力を収集するために使用するTextBox付きのTemplateFieldがあります。どちらも同じコードを使用して、ポストバックでTextBox.Textを取得します。

TextBox tb = (TextBox)GvOne.Rows[i].FindControl("actualTxt"); 

GvOneは正しくtb.Textを取得します。 GvTwo は、tb.Text値が常に0であることを検出します。

基本GridViewのコード:

<asp:GridView ID="GvOne" runat="server" AutoGenerateColumns="False"> 
     <Columns> 
     <asp:TemplateField HeaderText="Return"> 
    <ItemTemplate> 
    <asp:TextBox id="actualTxt" runat="server" Text='0' Width="40px"></asp:TextBox> 
    </ItemTemplate>  
     </asp:TemplateField> 
     ... 
     </Columns> 
</asp:GridView> 

<asp:GridView ID="GvTwo" runat="server" AutoGenerateColumns="False"> 
     <Columns> 
     <asp:TemplateField HeaderText="Order"> 
    <ItemTemplate> 
    <asp:TextBox id="actualTxt" runat="server" Text='0' Width="40px"></asp:TextBox> 
    </ItemTemplate>  
     </asp:TemplateField> 

     ... 
     </Columns> 
</asp:GridView> 

Entity FrameworkのLINQとを使用するようにGvTwoを変更するには、大仕事とはいえ潜在的なソリューションです。誰がここで何が起こっているのか知っていますか?ため、ここで人気の需要に

UPDATE(ジョエルEthertonの答えに私のコメントを参照してください) はGvTwoためPage_Loadイベント内のGridViewを移入するためのコードは、(GvOneが似ている)である:

を検索
ordersGV.DataSource = dataSetObject.Tables["activeParts"]; 
    ordersGV.DataBind(); 

コードの背後にある私はordersGv.Datasourceへの他の参照はなく、ページのライフサイクルに関連付けられた他のイベントは見つからなかった。

+1

これは建設的でも有益なものでもありませんが、あなたの主題がジョークの設定のように聞こえることを指摘しなければなりませんでした。おそらく、その応答は、「DataSourceが単調に変化しているとき」である可能性があります。 – WCWedin

+4

GridViewをバインドするコード(およびいつそれらをバインドするページイベントを指定するのが重要なのか)を確認する必要があります。 –

+1

アップデートに関して - それ以上のものが必要です! 'Page_Load'メソッド全体(あなたが保護する必要があるものを除く)は良いスタートになります。関連性のない.aspxマークアップを削除することで、スペースを確保することができます(ただし、宣言的バインディングを使用していないことを示す以外は同じです)。私たちは、特別な条件があるかどうか、dataSetObjectを満たすものなどを確認する必要があります。 –

答えて

3

Gridviewsは、データソースをポストバック間で永続化しません。 null以外のデータソースを持つgridviewがある場合は、そのデータソースをコードのどこかに入力する必要があります。イベントサイクルを通して、ポストバック時にデータソースのポピュレーションが正確にどこにあるかを調べることは有益です。

+0

非常に役に立ちます!最初の大きな問題は解決されました。私のPage_Loadイベントは、GvOneでは(!IsPostBack)をチェックしますが、GvTwoではチェックしないので、GridViewはポストバック時に再投入されます!それはまた、tb.Text値が0にリセットされている理由かもしれません...私はそれにポストバックのチェックを行って、私はちょうど答えとしてマークしたら私たちは行くのがいいです! –

+0

確かに。 !IsPostbackのチェックが単純でないため、これらの問題がすべて発生しました。簡単に答えてくれてありがとう。 –

+1

これは私があなたのPage_Loadコードがどのように見えるか尋ねた理由です。 – clyc

2

Page_loadコードはどのように見えますか?

GridViewのは、たぶん二のGridViewはポストバックのデータソースを再バインドされたパフォーマンスの問題のためにポストバックの上に読み込ま

をDataSourceプロパティを保持していませんか?

+0

-1のために感謝します。ページの負荷やデータのバインド方法を見ずに、問題を理解するのは難しいです... – clyc

+1

コメントを残してdownvote-without-counterに+1してください。つまり、これはコメントそのものだったはずです。 – WCWedin

+0

+1ありがとうございました。あなたのご意見は私を答えに導くのに役立ちました。完全なコードを取得するには、答えが明らかになりました。 –

関連する問題