2

グリッドビュー

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AllowSorting="True" PagerSettings-Position="TopAndBottom"
    PagerSettings-Mode="Numeric" PageSize="40" CellPadding="4" DataSourceID="dsEquipmentGridView"
    ForeColor="#333333" GridLines="Horizontal" Style="font-size: x-small" AutoGenerateColumns="False"
    DataKeyNames="IREF" OnRowEditing="GridView1_RowEditing" OnRowUpdated="GridView1_RowUpdated"
    OnSorted="GridView1_Sorted" OnSorting="GridView1_Sorting" OnPageIndexChanged="GridView1_PageIndexChanged1"
    OnPageIndexChanging="GridView1_PageIndexChanging" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"
    OnSelectedIndexChanging="GridView1_SelectedIndexChanging" OnRowCommand="GridView1_RowCommand"
    BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" 
    OnRowCancelingEdit="GridView1_RowCancelingEdit" onload="GridView1_Load" 
    ondatabound="GridView1_DataBound">
    <PagerSettings Position="TopAndBottom" />
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    <Columns>
 <asp:CommandField ShowDeleteButton="False" ShowSelectButton="true" EditText="QuickEdit"
     HeaderText="Manage" SelectText="Manage" />

ロードされた最初のページでは、コマンドフィールドをクリックすると正しいDataKey値が表示されます。

ただし、結果の次のページに移動すると、レコードを選択すると、対応する値が正しくなくなります。前のページの情報を保持しているようです。どうすればこれを克服できますか?

編集:

GridView1_SelectedIndexChangedメソッドでは、次を使用しました。

    // Determine the index of the selected row.
    int index = GridView1.SelectedIndex;

    // Display the primary key value of the selected row.
    HttpContext.Current.Response.Write("The primary key value of the selected row is " + GridView1.DataKeys[index].Value.ToString() + ".<br>");

    GridViewRow row = GridView1.Rows[index];

    int rowindex = row.RowIndex;
    HttpContext.Current.Response.Write("rowindex-> " + rowindex.ToString() + "<br>");

    int ID = (int)GridView1.DataKeys[row.DataItemIndex - (GridView1.PageIndex * GridView1.PageSize)].Value;

    HttpContext.Current.Response.Write("row.DataItemIndex" + ID.ToString()+"<br>");

    int Userid = Convert.ToInt32(GridView1.DataKeys[index].Value);

    HttpContext.Current.Response.Write("Userid" + Userid.ToString() + "<br>");

ページング後に正しい値を取得できません。

4

3 に答える 3

2

ページングを使用する場合は、正確な行インデックス(0からtotalrowsグリッドビューでカウントされます)を取得できます。フェッチする場合datakeyは、現在のページの行インデックスを渡す必要があります。

次の行を使用して、現在のページインデックスを取得し、データキーを取得します。

// Get the correct row index since there is paging
int idx = gridViewRow.DataItemIndex - TestGridView.PageIndex * TestGridView.PageSize;
于 2013-04-04T07:42:04.810 に答える
1

遅れるかもしれません。しかし、他の人のために、私はこれに答えます。

「DataKey配列を使用する前にグリッドビューを再バインドしてください」

わたしにはできる。それが他の人にも役立つことを願っています。

于 2011-06-02T10:24:32.183 に答える
0

少し前に修正しました。サードパーティのGridViewヘルパークラスを使用していました。これはGridViewの通常の機能を壊しました。

于 2010-08-24T10:50:59.627 に答える