2011-10-27 14 views
0

私は、メソッドによって作成され、パネルの中にロードされ、そのためのプレースホルダーのように動作します。それをページに読み込むときに、ページをアップロードするとうまく動作します。テーブルが現れて、私が望む方法を正確にロードします。私の唯一の問題は、ユーザーがテーブルの列を更新するために選択するオプションを持つ2つのDropboxがあることです。問題は、私がクリックして更新ボタンをクリックすると、ページを検索して、対応するコントロール(つまり、ドロップボックスの値)が検索され、適切な値が得られてテーブルが更新されます。私のコントロールがパネルに表示されないのはなぜですか?

これは私が私の更新ボタンでやっているものです:

 protected void Update_Click(object sender, EventArgs e) 
    { 
     UpdateFail.Visible = false; 
     UpdateSucceed.Visible = false; 
     string MachineTypeID; 
     string MachineModelID; 
     string machinetypeid; 
     string machinemodelid; 
     int i = 0; 
     machine = inputsService.GetMachineSiteDetails(SiteID); 
     foreach (Machine Machine in machine) 
     { 
      try 
      {     
       machinetypeid = Machine.ID.ToString() + "type"; 
       machinemodelid = Machine.ID.ToString() + "model"; 
       Control type = MyExtensions.FindControlRecursive(this, machinetypeid); 
       Control model = MyExtensions.FindControlRecursive(this, machinemodelid); 
       RadComboBox machinetype = (RadComboBox) type; 
       RadComboBox machinemodel = (RadComboBox) model; 
       MachineTypeID = machinetype.SelectedValue; 
       MachineModelID = machinemodel.SelectedValue; 
       if (MachineTypeID != "") 
       { 
        inputsService.UpdateMachineModels(Machine.ID, MachineModelID); 
        i++; 
       } 
       if (MachineModelID != "") 
       { 
        inputsService.UpdateMachineTypes(Machine.ID, MachineTypeID); 
        i++; 
       } 
      } 
      catch (Exception ex) 
      { 
       { 
        logger.ErrorFormat(
         "Update_Click exception occurred when attempting to update the database {0}", ex); 
       } 
      } 
     } 
     if (i != 0) 
     { 
      UpdateFail.Visible = false; 
      UpdateSucceed.Visible = true; 
     } 
     else 
     { 
      UpdateSucceed.Visible = false; 
      UpdateFail.Visible = true; 
     } 
     //clear out the old table and replace with the newly revized table. 
     AddTable(); 
    } 

今私の問題は

    Control type = MyExtensions.FindControlRecursive(this, machinetypeid); 
       Control model = MyExtensions.FindControlRecursive(this, machinemodelid); 

以下の2行のコード方法MyExtensions.FindControlRecursive(に関係しています)されますこの:

 public static Control FindControlRecursive(Control root, string id) 
    { 
     System.Web.UI.Control controlFound; 
     if (root != null) 
     { 
      controlFound = root.FindControl(id); 
      if (controlFound != null) 
       return controlFound; 
      foreach (Control c in root.Controls) 
      { 
       controlFound = FindControlRecursive(c, id); 
       if (controlFound != null) 
        return controlFound; 
      } 
     } 
     return null; 
    } 

アップデート1 これは、findcontrolメソッドに到達すると、pannel内のテーブルを見つけることができないため、nullを返してテーブルを更新できません。

私が知りたいことは、ここで間違っていますが、どうすればこの問題を解決できますか?

ご意見やご提案は大変ありがとうございます。

ありがとうございました

+0

あなたは実際に何をしているかしていないかを説明していませんでした。 –

答えて

1

いつテーブルを作成していますか?テーブルを動的に作成する場合は、ViewStateをリストアできるようにOnInitより後で再作成する必要があります。

1

なぜあなたは、この再帰的な検索コントロールを試みてはいけない:シャイすぎると何

public static Control FindControlRecursive(this Control Root, string Id) 
{ 
    if (Root.ID == Id) 
     return Root; 

    foreach (Control Ctl in Root.Controls) 
    { 
     Control FoundCtl = FindControlRecursive(Ctl, Id); 
     if (FoundCtl != null) 
      return FoundCtl; 
    } 

    return null; 
} 

は重要です - あなたはあなたのUpdateメソッドでアクセスする前に、あなたのテーブルは、データとユーザの入力で初期化/再作成されていますか?

関連する問題