2016-05-06 12 views
0

選択したタブに応じて動的にレンダリングされるusercontrolを含むTabContainerコントロールを使用しています。 usercontrolの内部には、チェックボックス、ラベル、および隠しフィールドを含むリピータがあります。 itemdataboundイベント内でこれらのフィールドの値を更新/変更しています。CheckBoxとHiddenフィールドの値がリピータ内で更新されない

ページが最初に読み込まれるときにすべてが正常に機能していますが、その後にリピーターを再バインドすると、ラベル値だけが変更され、古い値を含むチェックボックス/隠しフィールドのみが変更されます。

私はすべての更新パネルを使用していません。私が間違っていることを提案してください。下はitemdataboundの中に私のコードスニペットです。

protected void rptrIngrList_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     try 
     { 
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
      { 
       SimpleIngredientObject currentItem = e.Item.DataItem as SimpleIngredientObject; 

       HiddenField hiddenIngrId = (HiddenField)e.Item.FindControl("hdnIngrId"); 
       hiddenIngrId.Value = currentItem.IngredientId.ToString(); 

       HiddenField hdnAltIngrId = (HiddenField)e.Item.FindControl("hdnAltIngrId"); 
       hdnAltIngrId.Value = currentItem.IngrAltId.ToString(); 

       HtmlGenericControl span = (HtmlGenericControl)e.Item.FindControl("abcd"); 
       if (currentItem.UserIngrAvailability == 0 || currentItem.UserIngrAvailability == null) 
        span.InnerText = GetAvailabilityChar(currentItem.IngrAvailabilityId); 
       else 
        span.InnerText = GetAvailabilityChar(currentItem.UserIngrAvailability); 

       Label lblIngrName = (Label)e.Item.FindControl("LabelIngredientName"); 
       lblIngrName.Text = currentItem.IngredientName; 


       CheckBox chkIngrUse = (CheckBox)e.Item.FindControl("chkIngrUsage"); 
      // chkIngrUse.Checked = (currentItem.IngrMarked == null) ? false : (currentItem.IngrMarked == true) ? true : false; 
       chkIngrUse.Checked = Convert.ToBoolean(System.Web.UI.DataBinder.Eval(e.Item.DataItem, "IngrMarked")); 

      } 
     } 

答えて

0

データを保存する場所でコードを共有してください。新しいフォームデータを保存する前に、古い値を再バインドしているようです。

+0

私の問題を調べてくれてありがとう。私は、Session ["ListIngredients"]というセッション変数でデータを取得しています。最初にページが読み込まれた後、リピーターにバインドされているSession ["SearchResult"]という別のセッション変数にフィルタリングされた出力を入れています。 コードをデバッグするときに値が表示されます – ChupChapCharli

0

リピーターはDatabind()が発生したときにItemDataBoundを発生させるだけなので、リピーターでdatabind()を呼び出す必要があります。したがって、Databind()を手動で呼び出さなかった場合、コードは起動しません。データソースが利用可能になると、それは各アイテムを通過し、itemdataboundイベントを呼び出します。そのため、DataItem値(データソースのオブジェクト)が表示されます。

+0

リピータを含むユーザーコントロールのページ読み込み時に既にDataBind()を使用してリピータをバインドしています。問題は、itemdataboundのhiddenフィールドとcheckboxに割り当てられた値が、リピータの内部にあるUI上で更新されないということです。 – ChupChapCharli

関連する問題