如何从动态构建的组合框中获取选定值

本文关键字:获取 组合 动态 构建 | 更新日期: 2023-09-27 18:12:15

所以我有一个动态构建的表,它为数据库中的每台机器添加行。每行包含4列,其中2列添加到表中,它们包含一个RadComboBox,它使用户能够从数据库中选择某些值。

为表

构建每一行的方法
        private void AddNewRow1(Machine Machine)
    {
        //start a new row
        TableCell site = new TableCell();
        TableCell name = new TableCell();
        TableCell type = new TableCell();
        TableCell model = new TableCell();
        TableRow tr = new TableRow(); 
        Literal breakline = new Literal();
        breakline.Text = "<br />";
        Literal breakline1 = new Literal();
        breakline1.Text = "<br />"; 
        //site name column
        site.RowSpan = 2;
        site.Controls.Add(AddSiteField(Machine));
        tr.Controls.Add(site);
        //machine name
        name.RowSpan = 2;
        name.Controls.Add(AddMachineField(Machine));
        tr.Controls.Add(name);
        //machine type name
        type.RowSpan = 2;
        type.Controls.Add(AddMachineTypeField(Machine));
        type.Controls.Add(breakline);
        type.Controls.Add(AddTypeComboBox());
        tr.Controls.Add(type);
        //machine model name
        model.RowSpan = 2;
        model.Controls.Add(AddMachineModelField(Machine));
        model.Controls.Add(breakline1);
        model.Controls.Add(AddModelComboBox());
        tr.Controls.Add(model);
        AssignPlaceHolder.Controls.Add(tr);
    }

模型和类型控件AddModelComboBox()或AddTypeComboBox()中的方法如下:

        private RadComboBox AddModelComboBox()
    {
        RadComboBox MachineModelCombo = new RadComboBox();
        machineModel = inputsService.GetMachineModelList(SiteID);
        foreach (MachineModel MachineModel in machineModel)
        {
            if (MachineModel.Name != "NULL")
            {                    
                MachineModelCombo.Items.Add(new RadComboBoxItem(MachineModel.Name, MachineModel.ID));
            }
        }
        MachineModelCombo.EnableLoadOnDemand = true;
        MachineModelCombo.EmptyMessage = "Select a Machine Model";
        return MachineModelCombo;
    }

表工作正常,并且正确构建。我在下面的代码中遇到的问题与获得这些动态构建组合框的值有关:

        protected void Update_Click(object sender, EventArgs e)
    {
      string MachineTypeID;
      string MachineModelID;
      machine = inputsService.GetMachineSiteDetails(SiteID);
      foreach (Machine Machine in machine)
      {
          try
          {
              RadComboBox machineTypeComboBox = new RadComboBox();
              RadComboBox machineModelComboBox = new RadComboBox();
              MachineTypeID = machineTypeComboBox.SelectedValue;
              MachineModelID = machineModelComboBox.SelectedValue;
              inputsService.UpdateMachineModels(Machine.ID, MachineTypeID);
              inputsService.UpdateMachineTypes(Machine.ID, MachineModelID);
          }
          catch (Exception ex)
          {
              {
                  logger.ErrorFormat(
                      "Update_Click exception occurred when attempting to update the database {0}", ex);
              }
          }
      }

我的问题是,我如何从动态构建的radcombobox中获得所选值?

注意:

              inputsService.UpdateMachineModels(Machine.ID, MachineTypeID);
              inputsService.UpdateMachineTypes(Machine.ID, MachineModelID);

这两行是对DB api的web服务调用,根据网页中选择的项目更新数据库。对于任何以inputtsservice开头的调用也是如此。*

任何帮助或建议都是非常感谢的。

谢谢

如何从动态构建的组合框中获取选定值

好吧,我明白了,现在看着它似乎很明显…哈哈,所以我想我应该把它贴在这里,以防有人需要这个问题的答案。

最终这个问题的解决方案是给每个组合框它自己的id。这是通过下面的代码实现的:

这是现在修改的创建一个新的组合框方法:

    private RadComboBox AddModelComboBox(Machine machine)
    {
        RadComboBox MachineModelCombo = new RadComboBox();
        machineModel = inputsService.GetMachineModelList(SiteID);
        foreach (MachineModel MachineModel in machineModel)
        {
            if (MachineModel.Name != "NULL")
            {                    
                MachineModelCombo.Items.Add(new RadComboBoxItem(MachineModel.Name, MachineModel.ID));
            }
        }
        MachineModelCombo.ID = machine.ID.ToString() + "model";
        MachineModelCombo.EnableLoadOnDemand = true;
        MachineModelCombo.EmptyMessage = "Select a Machine Model";
        return MachineModelCombo;
    }

Machine进入DB并获取机器的id。为了确保类型和模型方法不会获得相同的id,在机器id中添加了一个字符串。

现在要从radComboBox中获得一个选定的值,我使用了以下代码:

注意:这仍在开发中,不包括验证和捕获。

        protected void Update_Click(object sender, EventArgs e)
    {
      string MachineTypeID;
      string MachineModelID;
      machine = inputsService.GetMachineSiteDetails(SiteID);
      foreach (Machine Machine in machine)
      {
          try
          {
              string machinetypeid = Machine.ID.ToString() + "type";
              string 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;
              inputsService.UpdateMachineModels(Machine.ID, MachineModelID);
              inputsService.UpdateMachineTypes(Machine.ID, MachineTypeID);
          }
          catch (Exception ex)
          {
              {
                  logger.ErrorFormat(
                      "Update_Click exception occurred when attempting to update the database {0}", ex);
              }
          }
      }
      //clear out the old table and replace with the newly revized table.
      AssignPlaceHolder.Controls.Clear();  
      AddTableTitles();
      UpdateTableControls();
    }
注意:第二个方法中的控件是一个方法,它通过在html中找到它的id/root来获得动态构建的控件,并通过它获得所选值。