C# 启用分页时在asp.ListView中查找具有值的项

C# 启用分页时在asp.ListView中查找具有值的项,c#,asp.net,listview,paging,selectedvalue,C#,Asp.net,Listview,Paging,Selectedvalue,我试图在单独页面上的aspx ListView中找到所选项目,然后切换页面并选择该项目。我有正在查找的ListViewItem的value属性,但似乎无法使其正常工作。以下是我尝试过的: for (int i = 0; i < lvProject.Items.Count; i++) { if (((Label)lvProject.Items[i].FindControl("Project_IDLabel")).Text == project.ToString()) {

我试图在单独页面上的aspx ListView中找到所选项目,然后切换页面并选择该项目。我有正在查找的ListViewItem的value属性,但似乎无法使其正常工作。以下是我尝试过的:

for (int i = 0; i < lvProject.Items.Count; i++)
{
    if (((Label)lvProject.Items[i].FindControl("Project_IDLabel")).Text == project.ToString())
    {
        lvProject.SelectItem(i);
        break;
    }
}
所以lvProject是我的列表视图。项目变量是一个Int64,它表示我的项目的UID。这也是我的ListViewItems的值。上面代码的问题是,当启用分页时,并且项目位于不同的页面上,这将不起作用,因为listView.Items.Count仅设置为当前页面上项目的数量

我的目标是找到项目,设置listview以显示正确的页面,最后选择项目。您可能会认为我可以设置SelectedValue属性,但这并不像只读那样简单。任何想法都会大有帮助,提前谢谢


-Roman

如何绑定ListView项

如果您使用的是数据库级分页存储过程,则通过传递搜索条件,使用数据库查询/存储过程进行查询(您应该以相同的方式进行搜索)。 如果要将ListView项绑定到业务/数据层提供的项集合,则必须在提供项的层上创建搜索方法,以便该方法能够循环遍历项。 您应该将SelectedIndex属性设置为i


为了从对象数据源获取总记录计数,应使用所选事件,如下所示:

protected void ObjectDataSource1_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
    // Get total count from the ObjectDataSource
    DataTable dt = e.ReturnValue as DataTable;
    if (dt != null) recordCount = dt.Rows.Count; // recordCount being declared outside the method
}
for (int i = 0; i < recordCount; i++)
{
    Label lblItem = (Label)lvProject.Items[i].FindControl("IdLabel");
    if (lblItem.Text.Equals(itemToSearch))
    {
        lvProject.SelectedIndex = i;
        break;
    }
}
然后,您可以按如下方式搜索该项目:

protected void ObjectDataSource1_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
    // Get total count from the ObjectDataSource
    DataTable dt = e.ReturnValue as DataTable;
    if (dt != null) recordCount = dt.Rows.Count; // recordCount being declared outside the method
}
for (int i = 0; i < recordCount; i++)
{
    Label lblItem = (Label)lvProject.Items[i].FindControl("IdLabel");
    if (lblItem.Text.Equals(itemToSearch))
    {
        lvProject.SelectedIndex = i;
        break;
    }
}

希望有帮助

这会起作用,但不能解决问题。请参阅本例中启用了分页,ListView的PageSize=5。这意味着在上面的示例中,lvProject.Items.Count的最大值可以是5。即使完整列表中有200项。我想我首先需要找到一种方法来搜索所有200个项目,除了当前页面上的5个项目。然后我需要找出项目在哪一页上。最后,我需要切换到该页面,并在回帖中选择适当的项目。有人知道实现这一点的代码吗?我将ListView绑定到一个SqlDataSource,该SqlDataSource使用StoredProcess从SqlServer访问我的数据。我不完全熟悉如何使用数据源进行搜索,特别是因为我已经启用了排序功能,我不希望排序摆脱我选择的索引,因为数据是以不同的方式排列的。通过查看我的SqlDS对象,我看不到如何访问该数据。你能不能更具体一点,说明如何做到这一点?