如何从动态构建的组合框中获取选定值
本文关键字:获取 组合 动态 构建 | 更新日期: 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来获得动态构建的控件,并通过它获得所选值。