2012-02-27 9 views
1

私はリピータを使用して、動的なデータベース駆動型を作成しています。リピータの他の行でダイナミックコントロールを見つける

必要な機能の一部は、以前に選択されたドロップダウンの値に依存して値を生成する動的に駆動されるドロップダウンリストを持つことができます。

だから私はドロップダウンリストコントロールを作成し、これを行に追加してIDを割り当てて、次の行に移動すると、前の行のコントロールからどのように値を取得するのですか?

これは私が試しているものですが、.FindControlは毎回nullを返しています。

DropDownList toParentDDL = (DropDownList)rptDynamicForm.FindControl("ParentControlID"); 

IDが正しく設定されていて、IDが検索制御方法に配置されていることが適切です。私はリピーターにコントロールを追加している場合は

ちょうど別の考え...、私はそのようなようにやっている:

e.Item.FindControl("pnlQuestionAnswer").Controls.Add(toDropDown); 

それがパネル内にネストされていることだろうか?

混同を解消する。これらのコントロールはItemDataBoundで作成されています。

解決策:

Timの助けを借りてください。私はついにその問題が何かを理解しました。私はリピーター内のコントロールを探していましたが、リピーター自体にはコントロールが含まれていませんでした。アイテムには私が探していたコントロールが含まれていて、アイテムはリピーターにありますが、今であればリターンをdoesntのよう

    foreach (RepeaterItem toItem in rptDynamicForm.Items) 
        { 
         DropDownList toParentDDL = (DropDownList)toItem.FindControl("ParentControlID"); 

         } 

:私は単純にやった問題を修正するために

(私はそれがない、jqueryの中.findのような作品を.findcontorlその私の頭の中でそれを持っていました) nullの場合、正しいコントロールが含まれます。

+0

はあなたにFindControl(「」)でのコントロールの名前は、C#の場合は正しく入力されていることを確認することができます:

は、したがって、あなたはあなたのコントロールを見つけるために、前の項目への参照を取得する必要があります重要です.. – MethodMan

+0

idに割り当てられ、findコントロールで使用される値は、データベースから取得されます...私は実行時に値が同一であることを確認しました。 – Patrick

+0

あなたはあなたのビューソースを確認し、両方のIDの間の差分を特定する必要があります –

答えて

3

リピーターを検索して、ItemTemplatesの1つでコントロールを検索することはできません。それらのNamingContainerはであり、Repeaterではありません。これは、すべてのアイテムに前/次のアイテムと同じIDのコントロールが含まれているので意味があります。

protected void rptDynamicForm_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) 
{ 
    switch (e.Item.ItemType) { 
     case ListItemType.Item: 
     case ListItemType.AlternatingItem: 
      if (e.Item.ItemIndex != 0) { 
      DropDownList toParentDDL = 
       (DropDownList)rptDynamicForm.Items[e.Item.ItemIndex - 1].FindControl("ParentControlID"); 
      } 
      break; 
    } 
} 
+0

ありがとう、私は今それを得る...不運にも、前の行を取得するこの特定のフォームの1つのフィールドから親の値を派生する4つの行があるため動作しません。これは正解です。 – Patrick

関連する問題