以下场景:我在Page_Load(inside(!Page.IsPostBack))中创建一个CheckBoxList,然后使用LINQ在我的业务逻辑中加载一些数据。生成的数据是一个具有不同Value和Text属性的List,这在我调用该方法的时候很好(因为我用调试器检查了返回变量)。
现在,一旦将List对象指定为CheckBoxList的DataSource,使用调试器我意识到CheckBoxList.Items已使用Item.Text属性覆盖了Item.Value属性。
所以,我想要的(和制作的)List包含以下项目,例如:
但是,在我的CheckBoxList的DataBind()之后,这就是Items集合中的Items的样子:
这个问题有一个干净的解决方案吗?我更感兴趣的是比较项目(通过值找到)和另一个项目列表(实际上是SELECTED项目;我认为给CheckBoxList一个ListItems列表和Item.Selected属性将是最干净的方法..没了)。
提前感谢任何建议!
答案 0 :(得分:1)
解决方法,不是真正的解决方案:我没有给我的CheckBoxList一个List作为DataSource我提供了一个DataTable对象作为DataSource:
DataTable dt = new DataTable();
dt.Columns.Add("Text");
dt.Columns.Add("Value");
我创建新的DataRow对象而不是创建ListItem对象:
DataRow dr = dt.NewRow();
dr["Text"] = "myText";
dr["Value"] = 0001;
dt.Rows.Add(dr);
最后,我将DataTable分配给我的CheckBoxList。 DataValueField和DataTextField字符串必须与DataTable的列名相同:
myCheckBoxList.DataSource = dt;
myCheckBoxList.DataValueField = "Value";
myCheckBoxList.DataTextField= "Text";
myCheckBoxList.DataBind();
在另一个步骤中,我遍历我的CheckBoxList.Items并将这些项目与值列表进行比较,将ListItem.Selected设置为true,但由于这不是问题的一部分,所以我现在暂时离开它。请问您是否需要该代码段。