Неліктен басқару элементімнің ешқайсысы оны аспапты басқарудан алу кезінде панельде көрсетілмейді

SO менде динамикалық тұрғыдан құрылған кесте бар, ол әдіс арқылы жасалады және панелге жүктеледі, ол орын ұстаушы сияқты әрекет етеді және оны бетке жүктегенде, бетті жүктегенімде ол жақсы жұмыс істейді. Кесте пайда болады және дәл осылай қалайды. Менің жалғыз мәселе - бұл пайдаланушыға кестенің сол бағандарын жаңартуды таңдаған нұсқалары бар екі қойма терезесі бар. Мәселе мынада, менің барамын және жаңарту түймесін басқан кезде, ол төменде түсіндірілетін кестені жаңарту үшін тиісті мәнді алатын сәйкес басқару элементінің бетін іздейді (яғни, тамшылардағы мәндер).

Жаңарту түймесімен мына нәрсені жасаймын:

        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 What it is doing is when it gets to the findcontrol method, it can't find the table within the pannel so it returns null and fails to update the table.

Мен нені білгім келеді, бұл жерде мен не істеп жатырмын және бұл мәселені қалай шеше аламын?

Кез келген көмек немесе ұсыныс өте жоғары бағаланады.

Рақмет сізге

0
Сіз мұны не істеп жатқаныңызды түсіндіре алмадыңыз.
қосылды автор James Johnson, көзі

2 жауаптар

Кестені қашан жасайсыз? Егер сіз кестені динамикалық түрде жасасаңыз, ол қалпына келтіру үшін 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;
}

Шайдың айтқандары да маңызды: сіздің Жаңарту әдісіңізге кірмес бұрын сіздің кестеңіз деректермен және пайдаланушы кірісімен қайта құрастырылған/инициализацияланған ба?

1
қосылды