1

我有一个启用分页的gridview控件,我有一个datakey值,我想找到一个关于datakey值的行索引,我有这个代码,

protected int GetRowIndex(object userID)
{
  for(int i = 0l i <= GridView1.DataKey.Count -1 ; i++)
  {
    if(GridView1.DataKey[i].Value == userID)
    {
       return i;
    }   

  }

}

但是这段代码存在问题,如果在该页面中找不到该用户 ID,它将返回 0,我的问题是如何更改页面索引以在所有页面中查找行。我正在使用 gridview 自己的分页。

4

4 回答 4

2

对此没有直接支持,因为 GridView 没有将所有 DataKeys 存储在某个地方以供其搜索。它仅保留用于当前页面的一组 DataKey。更改页面索引不会自动“加载”该页面的 DataKey,以便您可以搜索每个页面。

您必须通过添加一个函数来解决这个问题,当给定用户 ID 时,该函数将返回要显示的页面。它可能被命名为 GetPageFromUserID(object userID)。此功能需要使用与网格相同的排序顺序、页面大小和过滤条件来搜索您的数据存储。

即使使用您将设置到 GridView.PageIndex 属性中的页面索引,您仍然必须在 GridView 上调用 DataBind() 以使其从数据库中加载行(和 DataKey),以便您可以使用上面的代码来查找行索引。

于 2012-06-20T21:52:57.403 回答
2
    private static int IndexOfGridView(GridView gridView, int dataKeyId, int index)
    {
        foreach (GridViewRow gvRow in gridView.Rows)
        {
            var dataKey = gridView.DataKeys[gvRow.DataItemIndex];
            if (dataKey == null || (int)dataKey.Value != dataKeyId) continue;
            index = gvRow.DataItemIndex;
            break;
        }
        return index;
    }
于 2018-10-21T05:39:37.427 回答
0

您可能会在 GridView 中找到行索引:

rowIndex = theGridView.DataKeys.IndexOf(theDataKeyValue)

我在一个我们仍在维护的旧 ASP.net VB 项目中发现了这个,希望它有所帮助。

于 2020-06-22T18:36:33.273 回答
-1
string user_id = GridView1.SelectedDataKey["userID"].ToString();

在这里,您可以在 gridview 中获取所选数据的用户 ID

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
          DataKeyNames="userID" OnRowDataBound="GridView1_RowDataBound"
                OnSelectedIndexChanged="GridView1_SelectedIndexChanged" >

   <asp:CommandField ShowSelectButton="True"> </asp:CommandField>

    // write code

  </asp:GridView>

你在 Gridview 中做分页概念,它最好在后端本身做,然后你会很容易显示数据,即你一次取 10 个数据,同时点击第一页,就像明智地一样。我在转发器中做过同样的概念与gridview相比很容易......

于 2012-06-21T06:24:14.660 回答