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

时间:2011-10-25 14:16:03

标签: c# asp.net web-services

所以我有一个动态构建的表,它为数据库中的每台机器添加行。每行包含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的webservice调用,以根据在网页中选择的项目对数据库进行更新。任何以inputsService。*

开头的调用都是如此

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

由于

1 个答案:

答案 0 :(得分:1)

好吧我想出来了,现在看了之后看起来很明显......大声笑所以我想我会在这里张贴以防万一其他人需要这个问题的答案。

最终解决这个问题的方法是给它拥有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;
    }

机器进入数据库并获取机器的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来获取动态构建的控件并通过它获取所选值的方法。