私は、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への他の参照はなく、ページのライフサイクルに関連付けられた他のイベントは見つからなかった。
これは建設的でも有益なものでもありませんが、あなたの主題がジョークの設定のように聞こえることを指摘しなければなりませんでした。おそらく、その応答は、「DataSourceが単調に変化しているとき」である可能性があります。 – WCWedin
GridViewをバインドするコード(およびいつそれらをバインドするページイベントを指定するのが重要なのか)を確認する必要があります。 –
アップデートに関して - それ以上のものが必要です! 'Page_Load'メソッド全体(あなたが保護する必要があるものを除く)は良いスタートになります。関連性のない.aspxマークアップを削除することで、スペースを確保することができます(ただし、宣言的バインディングを使用していないことを示す以外は同じです)。私たちは、特別な条件があるかどうか、dataSetObjectを満たすものなどを確認する必要があります。 –