2011-07-29 13 views
2

別のページにあるaspx ListViewで選択した項目を探して、その項目を選択しようとしています。私は探しているListViewItemのvalueプロパティを持っていますが、動作させることはできません。私が試したものは次のとおりです。ページングが有効なときにasp.ListViewの項目を値で検索する

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は私のリストビューです。プロジェクトVariableは、プロジェクトのUIDを表すInt64です。これは私のListViewItemの値でもあります。上記のコードの問題点は、ページングが有効になっていて、項目が別のページにある場合、listView.Items.Countが現在のページの項目数だけに設定されているため、これは機能しません。

私の目標は、アイテムを見つけて、正しいページを表示するようにリストビューを設定し、最後にアイテムを選択することです。 SelectedValueプロパティを設定することができますが、これは読み取り専用なので簡単ではありません。すべてのアイデアは、事前に感謝します。

- ローマン

答えて

0

どのようにListViewアイテムをバインドしますか?

  1. データベースレベルのページング(ストアドプロシージャ、クエリ)を使用している場合は、同じ方法で、検索条件を渡してデータベースクエリ/ストアドプロシージャを使用して検索する必要があります。
  2. ビジネス/データレイヤーによって提供されるアイテムのコレクションにアイテムをバインドする場合は、アイテムを提供するレイヤーで検索メソッドを作成して、このメソッドがアイテムをループできるようにする必要があります。次のよう
+0

私はSqlServerから自分のデータにアクセスするためにStoredProcedureを使用しているSqlDataSourceにListViewをバインドしています。私はデータソースを使用して検索する方法を完全に熟知していません。特にソートを有効にしているので(データが別の方法で配列されているため、選択したインデックスを消してしまわないようにしています)。私のSqlDSオブジェクトを見ても、そのデータにアクセスする方法はわかりません。これがどのように行われるのか、もう少し詳しく教えてください。 –

0

あなたはオブジェクトデータソースからの総レコード数を取得するために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; 
    } 
} 
+0

それはうまくいくが、問題は解決しない。この例ではページングが有効になっている、ListViewではPageSize = 5を参照してください。つまり、上記の例では、lvProject.Items.Countの最大値は5です。フルリストに200個の項目がある場合でも、私はまず、現在のページの5つだけを除いて200のすべての項目を検索する方法を見つけ出す必要があると思います。次に、アイテムがどのページにあるかを調べる必要があります。最後に、そのページに切り替えて、ポストバックで適切な項目を選択する必要があります。誰もがそれを達成するためのコードを知っていますか? –

2

SelectedIndexプロパティを設定する必要があり、あなたが選択したイベントを使用する必要があります。

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

希望すると助かります!

関連する問題