2010-08-05 65 views
2

的GridViewGridView的分頁,無法得到正確的Datakey價值

<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>"); 

我無法得到傳呼後,正確的值。

回答

0

前一段時間修復。正在使用第三方GridView輔助類。這打破了GridView的正常功能。

1

我可能會遲到。 但對於其他人,我回覆。

它爲我的作品 「使用DataKey陣列之前,再次重新綁定gridview的」。 希望它也適用於其他人。

2

當使用分頁,我們能得到確切的行索引(從0開始計數到totalrows在GridView控件) 和獲取datakey時,我們需要傳遞當前頁的行索引。

使用下面的一行來獲得當前的頁面索引,並獲得datakey:

// Get the correct row index since there is paging 
int idx = gridViewRow.DataItemIndex - TestGridView.PageIndex * TestGridView.PageSize;