当前位置: 动力学知识库 > 问答 > 编程问答 >

c# - Finding an item in asp.ListView with Value when paging is enabled

问题描述:

I'm trying to find the selected Item in an aspx ListView that is on a separate page, then switch the page and select the item. I have the value property of the ListViewItem I am looking for, but cannot seem to get it to work. Here is what I tried:

for (int i = 0; i < lvProject.Items.Count; i++)

{

if (((Label)lvProject.Items[i].FindControl("Project_IDLabel")).Text == project.ToString())

{

lvProject.SelectItem(i);

break;

}

}

So lvProject is my list view. The project Variable is an Int64 which represents the UID of my Project. This is also the Value of my ListViewItems. The problem with the code above is that when paging is enabled, and the item is on a different page this will not work because the listView.Items.Count is set to the # of Items on the current page only.

My goal is to find the item, set the listview to display the correct page, and finally select the item. You would figure that I could just set the SelectedValue property, but this is not that simple as it is read only. Any ideas would help greatly, thanks in advance.

--Roman

网友答案:

In order to get the total record count from the object data source, you should use the Selected event as follows:

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
}

You would then be able to search for the item as follows:

for (int i = 0; i < recordCount; i++)
{
    Label lblItem = (Label)lvProject.Items[i].FindControl("IdLabel");
    if (lblItem.Text.Equals(itemToSearch))
    {
        lvProject.SelectedIndex = i;
        break;
    }
}

Hope it helps!

网友答案:

How do you bind ListView Items?

  1. If you are using database level paging (stored procedure, query) - you should do search in the same way - using database query/stored procedure by passing a search criteria.
  2. If you are bind ListView Items to a collection of items which are provided by a business/data layer - you have to create search method on layer which provides items so this method will be able to loop through the items.
网友答案:

You should set the SelectedIndex property to i

for (int i = 0; i < lvProject.Items.Count; i++)
{
    if (((Label)lvProject.Items[i].FindControl("Project_IDLabel")).Text == project.ToString())
    {
        lvProject.SelectedIndex = i;
        break;
    }
 }
分享给朋友:
您可能感兴趣的文章:
随机阅读: