Почему ни один из моих элементов управления не отображается на панели при попытке вытащить его из элемента управления asp - PullRequest
0 голосов
/ 27 октября 2011

Так что у меня есть динамически создаваемая таблица, которая создается методом и загружается в панель, которая выполняет роль заполнителя для нее, и при загрузке ее на страницу она прекрасно работает, когда я загружаю страницу. Стол подходит и загружается именно так, как я хочу. Моя единственная проблема заключается в том, что у меня есть два 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);

Метод 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, он не может найти таблицу в панели, поэтому возвращает ноль и не может обновить таблицу.

Что я хотел бы знать, что я здесь делаю неправильно и как я могу решить эту проблему?

Любая помощь или предложения с благодарностью.

Спасибо

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Почему бы вам не попробовать этот рекурсивный элемент поиска:

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

То, что сказал Шай, тоже важно - воссоздается ли ваша таблица / инициализируется ли она данными и пользовательским вводом, прежде чем вы получите к нему доступ в методе обновления?

1 голос
/ 27 октября 2011

Когда вы создаете таблицу? Если вы создаете таблицу динамически, она ДОЛЖНА быть воссоздана не позднее OnInit, чтобы состояние представления можно было восстановить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...