【问题标题】:How to obtain a selected value from dynamically built combobox如何从动态构建的组合框中获取选定的值
【发布时间】:2011-11-23 00:58:45
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 您是否在循环浏览您在更新事件中创建的表行?
  • 它循环遍历在机器对象中找到的每台机器,机器对象是从对数据库的调用中获得的。

标签: c# asp.net web-services


【解决方案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。为了确保 type 和 model 方法不会获得相同的 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来获取动态构建的控件,并通过它获取选择值的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多