首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

foreach给页面List控件赋值,如何使它的值不覆盖别的List控件

2013-07-08 
【急】foreach给页面List控件赋值,怎么使它的值不覆盖别的List控件页面上一共有6个下拉列表控件,是cs动态生

【急】foreach给页面List控件赋值,怎么使它的值不覆盖别的List控件
页面上一共有6个下拉列表控件,是cs动态生成的,控件和控件之间没有做任何关联。
之后再给这些控件赋值的时候却出了问题。
在代码中给Field1、Field2、Field3赋的值不同,但是赋值的时候,明明只改其中一个的值,另外两个控件的值也会跟着被改变。
同样给Sort1、Sort2、Sort3赋值却没有问题,这是为什么呢?

生成控件的代码:


//生成表
TableRow tableRow = new TableRow();
for (int i = 1; i < 4; i++)
{
   //生成行
   TableRow tableRow = new TableRow();
   //cell
   TableCell cellBody = new TableCell();
   //生成第一个下拉列表控件
   ListControlBase comboBox = (ListControlBase)ListControlBase.Create(Page, "ComboBoxControl");
   //给下拉列表控件添加选项(lstItem是在for外面定义的一个ListItemCollection变量)
   foreach (ListItem item in lstItem)
   {
       comboBox.Items.Add(item);
   }
   Control control = (Control)comboBox;
   control.ID = "Field" + i;
   //将控件放到cell中
   AddControl(control);
   cellBody.Controls.Add(control);
   
   //第二个下拉列表控件
   ListControlBase comboBox2 = (ListControlBase)ListControlBase.Create(Page, "ComboBoxControl");
   comboBox2.ID = "Sort" + i;
   //给下拉列表控件添加选项
   comboBox2.AddItem("选项1","1");
   comboBox2.AddItem("选项2","2");
   //将控件放到cell中
   AddControl(control2);
   cellBody.Controls.Add(control2);
   tableRow.Cells.Add(control2);
   table.Rows.Add(tableRow);
}


给控件赋值的代码:

//RecordSet是取到的值
foreach (Record record in RecordSet)
{
   //取出来的值会是1或2或3
   string order = record.GetString(tableName.Order);
   string id = "Field" + order;
   //controls是所有控件的集合
   if (controls.ContainsKey(id))
   {
      ((ListControlBase)controls[id]).Value = record.GetString(tableName.FieldValue);
   }
   id = "Sort" + displayOrder;
   if (controls.ContainsKey(id))
   {
      ((ListControlBase)controls[id]).Value = record.GetString(tableName.SortValue);
   }
}


[解决办法]
什么叫改其中的一个值,另外两个也变?
怎么改,怎么变?
我估计就是你代码写得有问题
[解决办法]
调试一下赋值的地方不就清楚了
[解决办法]
汗,代码好乱,说一下我看到的问题啊

foreach (ListItem item in lstItem)
   {
       comboBox.Items.Add(item);
   }

这个是楼主的filed系列控件,他的items集合都是用的lstItem,所以楼主该其中的一个值的话,lstitem会跟着改变的,应为是按引用传递的
comboBox2.ID = "Sort" + i;
   //给下拉列表控件添加选项
   comboBox2.AddItem("选项1","1");
   comboBox2.AddItem("选项2","2");

这个是硬编码的,相互之间没有影响的

对的话分都给我啊。
[解决办法]
应该是循环这里出现了问题:
//给下拉列表控件添加选项(lstItem是在for外面定义的一个ListItemCollection变量)   
foreach (ListItem item in lstItem)   
{      
 comboBox.Items.Add(item);  
 }  
 Control control = (Control)comboBox;  
 control.ID = "Field" + i;

仔细检查看看,为什么这里出现问题。

你把这块注释掉,然后用固定值看看,会不会出现类似的问题。

热点排行