2011-06-29 10 views
1

内側リピータから外側リピータアイテムを取得する方法を教えてください。私の外側リピータのデータソースには3つの項目があります。私の内側のリピータのデータソースには7つの項目があります。内側のリピータの内部を反復するとき、どのように外側のリピータからアイテムを取得しますか?内側リピータの外側リピータアイテムを取得する

私の外部リピータデータソースは一般的なリストです。このリストの項目の1つが日(数字形式)です。私の内側のリピータは、このリストのint、1〜7のリストです。私はいくつかのロジックを必要とするので、私は何日か(内側に)リストを繰り返しています.....もし現在のレコードが現在の繰り返しで2の値を持っていれば(つまりマッチがあるので)何かを印刷します。

私が提供される任意のヘルプやヒントについて

おかげで...それは理にかなって願っています。

答えて

2

私が通常やっていることは、databoundの外側の項目をキャッチして、ページの変数に保存することです。ここで私は2つの連続するリピーターを持っています。私は最初のリピータから年を保存して、私が2番目のリピータをバインドしているときにそれを参照することができます。

protected void repAnnualReport_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     CurrentYear = int.Parse(((Literal)e.Item.FindControl("litLicenseYear")).Text); 

     Repeater repLicenseLengths = (Repeater)e.Item.FindControl("repLicenseLengths"); 
     repLicenseLengths.DataSource = GetLicenseLengths(CurrentYear); 
     repLicenseLengths.DataBind(); 
    } 

    protected void repLicenseLengths_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     CurrentLength = int.Parse(((Literal)e.Item.FindControl("litLicenseLength")).Text) * 365; 

     Repeater repMonthlyReport = (Repeater)e.Item.FindControl("repMonthlyReport"); 
     repMonthlyReport.DataSource = new object[12]; 
     repMonthlyReport.DataBind(); 
    } 

最初のリピータへのバインディングがクラスリストまたはクエリ可能な場合は、最初の行でこのように個々の項目にアクセスできます。

SaveCurrentItem = (CurrentItemClass)e.Item.DataItem; 
+0

これは良いアプローチです。オブジェクトを後で使用するために保存する方が、オブジェクトツリーを見つけようとするよりも優れています。 – Jay

+0

シンプルなソリューションをありがとう... – obautista

0

あなたが外リピーターにあなたの内側のリピーターからの.NETコントロールの階層構造を知っている場合、あなたはあなたの方法を見つけるためにNamingContainerプロパティを使用することができます。

protected void Repeater2_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 

      Repeater parentRepeater; 

      // e.Item: the item/header/whatever template that kicked off this event 
      // e.Item.NamingContainer: the owner of the item template (the innner repeater) 
      // e.Item.NamingContainer.NamingContainer: the outer item template 
      // e.Item.NamingContainer.NamingContainer.NamingContainer: the outer Repeater 

      parentRepeater = (Repeater)e.Item.NamingContainer.NamingContainer.NamingContainer; 

     } 
    } 

そうでなければあなたは構造がわからないか、またはこのような一定の基準をしたくない場合は、あなたがアップNamingContainerをループあなたの方法することができ、あなたは二度目のタイプRepeaterの何かを打つまで。

関連する問題