1

XMLDatasource を使用してグリッドにデータを入力する標準の .net 2.0 Gridview を使用しています。XMLDatasource の Data プロパティは動的に設定されるため、入力に基づいてグリッドビューを変更できます。

これはすべて正常に機能しますが、ページングに問題があります...

AllowPaging プロパティを「true」に設定し、PageSize プロパティを「10」に設定しました。GridView は、最初の 10 件のレコードとページ数をハイパーリンクとして下部に表示する際に最初に正常に表示されますが、ページ番号のいずれかをクリックして表示しようとすると、「オブジェクト参照が設定されていません」というメッセージ ボックスがポップアップ表示されます。オブジェクトのインスタンスに」

私が間違っていることは何ですか?? または、私が見逃した何かする必要がありますか??

現在使用中のコード。

グリッドビュー...

<asp:GridView ID="GridView1" 
      Runat="server" 
      DataSourceID="XmlDataSource1" 
      AutoGenerateColumns="False" 
      AllowPaging="True"
      style="width:100%; height:100%;"  
      EnableViewState="False">
<SelectedRowStyle BackColor="Red" />
<Columns>
   <asp:BoundField DataField="TYPE" HeaderText="TYPE" SortExpression="TYPE" />
   <asp:BoundField DataField="DESCRIPTION" HeaderText="DESCRIPTION" SortExpression="DESCRIPTION" />
</Columns>
</asp:GridView>

XML データソース...

<asp:XmlDataSource ID="XmlDataSource1" runat="server" TransformFile="~/XML/grid2.xslt" EnableCaching="False">
</asp:XmlDataSource>

XMLDatasource の Data プロパティを設定する vb.net コード...

Private Sub btnTest_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnTest.Click

  XmlDataSource1.Data = _testLib.GetGridXML(_Num)
  GridView1.DataBind()
End Sub

ここで、_testLib.GetGridXML は、渡された _Num に基づいて XML 文字列を返す関数です。

4

3 に答える 3

1

あなたのコードを見ずに言うのは難しいです...私はあなたが条件付きでデータを割り当てると推測します、すなわち:

If Not IsPostBack Then
   MyXMLDataSource.Data = "...some xml..."
End If

この場合、ポストバックでは空になり、例外が発生します。他の何かである可能性がありますが、それでも、コードはありません...

アップデート

さらに情報を追加したので...

Page_Loadには上記のコードのようなものが必要です。ここでは提供していないので、提供していると思います。そうしないと、ロードごとにnull参照例外が発生します。

そのことを念頭に置いて、いくつかのボタンクリックでデータを割り当てますが、PageIndexChangingでは割り当てません。

ボタンをクリックすると、ページが読み込まれ、データが割り当てられ、グリッドにデータが表示されます。次に、グリッドの次のリンクをクリックすると、ページが再度読み込まれ、PageIndexChangingが発生しますが、クリックイベントは発生しません。割り当てはどこにありますか?

私が見たところ、毎回Page_LoadにDataプロパティを割り当てるか、それ以降のすべてのイベント、つまりページの変更や並べ替えなどで割り当てます。

ところで、XmlDataSourceを宣言的に割り当てるときに、DataBindを呼び出す必要はありません。

于 2009-04-03T17:42:05.983 に答える
1

PreRender イベントでデータバインディングを行うとうまくいくはずです

PageLoad に設定すると XML データソースが動的に設定されるため、この段階ではすべてのページ要素が存在しない可能性があります。

于 2009-04-03T19:43:13.257 に答える