如何在GridView asp.net中找到关于datakey的行索引

时间:2012-06-20 17:59:51

标签: asp.net c#-4.0 gridview datakey

我有一个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,我的问题是如何更改页面索引以在所有pages中找到行。我正在使用gridview自己寻呼。

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

    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;
    }

答案 2 :(得分:0)

您可以使用以下方法在GridView中找到行索引:

mutate

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

答案 3 :(得分:-1)

string user_id = GridView1.SelectedDataKey["userID"].ToString();

在这里,您将获得gridview中所选数据的Userid

<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中做Pagination概念,它在后端本身做得更好,那么你很容易显示数据,即你一次点击第一页就可以获取10个数据就像明智一样..我做过同样的概念在转发器中,与gridview相比很容易...