Waarom verschijnen geen van mijn bedieningselementen in een paneel als ik probeer het uit de ASA-besturing te trekken

ZO heb ik een dynamisch gebouwde lijst die door een methode wordt gecreeerd en in een paneel wordt geladen dat als een plaatshouder voor het handelt en wanneer het laden het in de pagina, werkt het boete wanneer ik de pagina upload. De tafel komt op en laadt precies hoe ik het wil. Mijn enige probleem is dat ik twee dropboxes heb met opties die de gebruiker selecteert om die kolommen van de tabel bij te werken. Het probleem is dat wanneer ik op mijn updateknop ga en de pagina doorzoekt naar het bijbehorende besturingselement (dat wil zeggen de waarden in de vervolgkeuzelijsten) die de juiste waarde krijgt om de tabel bij te werken, die hieronder wordt uitgelegd.

Dit is wat ik aan het doen ben met mijn updateknop:

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

Nu heeft mijn probleem te maken met de twee regels code hieronder

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

De methode MyExtensions.FindControlRecursive() is dit:

        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.

Wat ik zou willen weten is, wat doe ik hier verkeerd en hoe kan ik dit probleem oplossen?

Alle hulp of suggesties worden zeer op prijs gesteld.

Dank je

0
Je hebt niet echt uitgelegd wat het doet/niet doet.
toegevoegd de auteur James Johnson, de bron

2 antwoord

Wanneer maak je de tafel? Als u dynamisch een tabel maakt, MOET deze uiterlijk in OnInit opnieuw worden gemaakt om de weergavestaat te kunnen herstellen.

1
toegevoegd

Waarom probeer je dit recursieve vindbesturingssysteem niet:

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

Wat Shai ook zei, is belangrijk: wordt je tabel opnieuw aangemaakt/geïnitialiseerd met gegevens en gebruikersinvoer voordat je hem opent in je Update-methode?

1
toegevoegd