C# ASP.net/CheckBoxList覆盖输入列表的值<;列表项目>;

C# ASP.net/CheckBoxList覆盖输入列表的值<;列表项目>;,c#,asp.net,C#,Asp.net,下面的场景:我在页面中创建一个复选框列表(在(!Page.IsPostBack)中),然后使用LINQ在我的业务逻辑中加载一些数据。生成的数据是一个具有不同值和文本属性的列表,在我调用该方法时(当我使用调试器检查返回变量时),这是很好的 现在,只要将List对象指定为CheckBoxList的数据源,使用调试器,我就意识到CheckBoxList.Items已经用Item.Text属性覆盖了Item.Value属性 因此,我想要的(和产生的)列表包含以下项目,例如: 但是,在我的复选框列表的D

下面的场景:我在页面中创建一个复选框列表(在(!Page.IsPostBack)中),然后使用LINQ在我的业务逻辑中加载一些数据。生成的数据是一个具有不同值和文本属性的列表,在我调用该方法时(当我使用调试器检查返回变量时),这是很好的

现在,只要将List对象指定为CheckBoxList的数据源,使用调试器,我就意识到CheckBoxList.Items已经用Item.Text属性覆盖了Item.Value属性

因此,我想要的(和产生的)列表包含以下项目,例如:

但是,在我的复选框列表的DataBind()之后,Items集合中的项是这样的:

这个问题有没有干净的解决办法?我更感兴趣的是将项目(按值查找)与另一个项目列表(实际上是选定的项目;我认为为复选框列表提供一个包含该项目的ListItems列表。SELECTED属性将是最干净的方法..不)


提前感谢您的建议

解决方法,而不是真正的解决方案:我没有将复选框列表作为数据源,而是将DataTable对象作为数据源:

DataTable dt = new DataTable();
dt.Columns.Add("Text");
dt.Columns.Add("Value");
我不创建ListItem对象,而是创建新的DataRow对象:

DataRow dr = dt.NewRow();
dr["Text"] = "myText";
dr["Value"] = 0001; 
dt.Rows.Add(dr);
最后,我将DataTable分配给我的复选框列表。DataValueField和DataTextField字符串必须与DataTable的列名相同:

myCheckBoxList.DataSource = dt;
myCheckBoxList.DataValueField = "Value";
myCheckBoxList.DataTextField= "Text";
myCheckBoxList.DataBind();

在下一步中,我循环检查我的CheckBoxList.Items,并将这些项与值列表进行比较,将ListItem.Selected设置为true,但由于这不是问题的一部分,因此我暂时将其忽略。请询问您是否需要该代码段。

您是否正在设置
复选框列表的
数据值字段
数据文本字段
属性,以便它知道数据源中哪些字段/属性要映射到值和文本属性?
列表项
文本
返回
null
。这同样适用于
属性,该属性返回
文本
(如果
为null
)。在这种情况下,似乎只有
文本
。所以你应该提供代码而不是图像,然后我们可以尝试修复它。Ben Robinson:不,我不是,因为我认为列表将映射为匹配文本/文本和值/值(这很有意义,对吧?)。问题是这些属性是字符串,因此如何映射DataValueField以匹配我的ListItem的Value属性,以及DataTextField/Text属性?蒂姆·施梅尔特:我确实偶然发现了类似的问题,但在我的例子中,正好相反——值被文本覆盖。我完全可以提供我的代码,但我觉得这更像是一个逻辑错误。谢谢你们两位@康拉德:如前所述,
文本
覆盖,如果
为空
,而
文本
为空,反之亦然。@Tim Schmelter:好的,我现在知道了。很抱歉在那件事上说得太慢了。