2011-10-27 52 views
0

因此,我有一個動態構建的表格,該表格由一個方法創建並加載到面板中,該面板的作用類似於佔位符,當它加載到頁面時,它工作正常,當我上傳頁面。桌子出現並加載我想要的。我唯一的問題是,我有兩個dropbox有用戶選擇更新表的列的選項。問題是,當我去並點擊我的更新按鈕時,它會搜索頁面以獲取正確值的相應控件(即Dropbox中的值),以更新下面將解釋的表。爲什麼我的控件在試圖從asp控件中拉出時沒有出現在面板中

這就是我跟我的更新按鈕,這樣做的:

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

的方法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; 
    } 

UPDATE1 它在做什麼是當它到達findcontrol方法時,它無法在pannel中找到表,因此它返回null並且無法更新表。

我想知道的是,我在這裏做錯了什麼,我該如何解決這個問題?

任何幫助或建議,非常感謝。

謝謝

+0

你沒有真正解釋它在做什麼/沒有做什麼。 –

回答

1

你什麼時候創建表?如果您要動態創建表,那麼必須在不晚於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; 
} 

什麼夏嘉曦說的太多是重要的 - 是你的表被重新創建/數據和用戶輸入初始化你在更新方法來訪問它之前?

相關問題