5

DataSourceID プロパティがカスタム ObjectDataSource オブジェクトに設定されている gridview があります。AllowPaging が True に設定されている場合、GridView はポストバック後に消えます。AllowPaging を False に設定すれば問題ありません。誰かが私のためにこれに光を当てることができますか? :)

編集:私が混乱しているもう1つのことは、DataSourceIDを設定すると、グリッドが必要なときにいつでもデータソースからデータを取得できると思ったことです。データを保持していないためにグリッドが消えている場合、グリッドビューがデータソースから必要なデータを取得しないのはなぜですか?

4

2 に答える 2

4

ポストバックが発生した後、データソースが維持または補充されておらず、グリッドに入力するアイテムがない可能性があります。ページングが有効になっているときに、データソース オブジェクトの状態を正しく処理していますか (ソースの再バインド/維持)。

これは漠然とした答えのように聞こえるかもしれませんが、ソースがデータを取得する方法の例がなければ、アイテムがなくなった理由を診断するのはちょっと難しいです.

編集:
私が考えていた方法は、コールバックのページング/ソート用でした。ただし、ODS とページングに関する情報をいくつか見つけました。以下を設定していることを確認してください。

  1. GridView: AllowPaging ともちろん、PageSize を設定する必要があります。
  2. ObjectDataSource: EnablePaging、また設定する必要があります:
    • MaximumRowsParameterName="maxRows"
    • StartRowIndexParameterName="startRowIndex"
    • SelectCountMethod="RecordCount"

ページングサイズなどを手動で処理したい場合は、項目2の3つのサブ項目を設定するだけでよいと思います。

詳細については、こちらをご覧ください。

于 2009-02-24T22:58:58.087 に答える
0

@adam0101の応答の詳細に答えるために、彼が「...カスタムデータソースがレコードカウントに対してゼロを返していることが判明しました。」とは、データソースをグリッドビューに「再アタッチ」する必要があるかもしれないということです。. ASP.net は、レコード「n」を取得していることを自動的に認識します。ここで、「n」は次のページの次の最初の行です。このソリューションは、asp.net にデータの自動処理を許可したくない場合に適しています。おそらく、ページが初めて読み込まれたときではなく、別のイベント (たとえば、[データの読み込み] ボタン) の後にデータを読み込みたいためです。しかし、Adam が以下で述べたように、本当の理由は「... ObjectDataSource を継承するデータソース サブクラスを作成しましたが、正しく実装されていませんでした。」. アダムの仮定で申し訳ありません。ありがとう

ただし、私のソリューションの残りの部分は、手動で派生したデータ ソースの使用に固執している人には有効だと思います。

すなわち

上記のように GridView を設定し、注意してください - DataSource プロパティなしで! これが私の例です:

     <asp:GridView ID="gvStudents" DataKeyNames="StudentID" runat="server" 
            ShowFooter="True" AutoGenerateColumns="False" Width="100%" AllowSorting="True" AllowPaging="true" PageSize="10" OnPageIndexChanging="gvStudents_PageIndexChanging">

次に、グリッドビューを新しいページに強制する必要があるときにいつでも呼び出すことができるプライベート メソッドまたはルーチンを作成します。

private void BindGridViewServer(GridView gv1)
{
    gv1.DataSource = sdsStudents;   //re-attach the datasource
    gv1.DataBind();                 //get a page of data AllowPaging must be true
}

次に、OnPageIndexChangingメソッドを作成します。

protected void gvStudents_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView myGV = (GridView)sender;
    myGV.PageIndex = e.NewPageIndex;
    BindGridViewServer(myGV);
}

この回答を完成させるために、デフォルトであるPostPackが起動されたときではなく、必要なときにデータをロードするコードを次に示します...

    protected void btnSEARCH(object sender, EventArgs e)
        {
//some code
                    //bind the gridview to the datasource here and then bind!
                    gvStudents.DataSource = sdsStudents;
                    gvStudents.DataBind();
//more code etc
        }
于 2015-08-26T04:38:43.173 に答える