我有一个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自己寻呼。
答案 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相比很容易...