ASP.net / CheckBoxList перезаписывает значения входного List<ListItems>
Следующий сценарий: я создаю CheckBoxList в моем Page_Load (внутри (!Page.IsPostBack)), затем загружаю некоторые данные в свою бизнес-логику, используя LINQ. Полученные данные представляют собой List с различными свойствами Value и Text, что хорошо, когда я вызываю метод (так как я проверял возвращаемую переменную с помощью отладчика).
Теперь, как только объект List назначен в качестве источника данных моего CheckBoxList, с помощью отладчика я понял, что CheckBoxList.Items перезаписали свойство Item.Value свойством Item.Text.
Итак, мой желаемый (и созданный) список содержит следующий элемент, например:
Однако после DataBind() моего CheckBoxList, вот как выглядят элементы в коллекции элементов:
Есть ли чистое решение этой проблемы? Мой дальнейший интерес состоит в том, чтобы сравнить элементы (найденные по значению) с другим списком элементов (на самом деле это элементы SELECTED; я подумал, что предоставление CheckBoxList списка ListItems со свойством Item.Selected будет самым чистым способом сделать это). Нету).
Спасибо заранее за любые предложения!
1 ответ
Обходной путь, не совсем решение: вместо того, чтобы предоставить моему CheckBoxList список в качестве источника данных, я предоставляю объект 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 моему CheckBoxList. Строки DataValueField и DataTextField должны совпадать с именами столбцов DataTable:
myCheckBoxList.DataSource = dt;
myCheckBoxList.DataValueField = "Value";
myCheckBoxList.DataTextField= "Text";
myCheckBoxList.DataBind();
На следующем шаге я перебираю свои элементы CheckBoxList.Items и сравниваю эти элементы со списком значений, устанавливая для параметра ListItem.Selected значение true, но поскольку это не было частью вопроса, я пока оставлю это позади. Пожалуйста, просто спросите, нужен ли вам этот фрагмент.