Как я могу получить выбранные значения CheckBoxList, то, что у меня не работает, С#.NET/VisualWebPart
Я создаю CheckBoxList в файле класса и использую HTMLTextWriter для визуализации элемента управления.
Я использую следующий код для хранения выбранных значений в строке:
string YrStr = "";
for (int i = 0; i < YrChkBox.Items.Count; i++)
{
if (YrChkBox.Items[i].Selected)
{
YrStr += YrChkBox.Items[i].Value + ";";
}
}
Я прошел через код и, похоже, не попал внутрь инструкции if, а атрибут выбранного значения всегда был ложным... У кого-нибудь есть идея, как я могу это решить?
Я заполняю его, используя следующее:
YrChkBox.Items.Add(new ListItem("Item 1", "Item1"));
Ответы
Ответ 1
На странице ASPX у вас есть список:
<asp:CheckBoxList ID="YrChkBox" runat="server"
onselectedindexchanged="YrChkBox_SelectedIndexChanged"></asp:CheckBoxList>
<asp:Button ID="button" runat="server" Text="Submit" />
В вашем коде за страницей aspx.cs у вас есть следующее:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Populate the CheckBoxList items only when it not a postback.
YrChkBox.Items.Add(new ListItem("Item 1", "Item1"));
YrChkBox.Items.Add(new ListItem("Item 2", "Item2"));
}
}
protected void YrChkBox_SelectedIndexChanged(object sender, EventArgs e)
{
// Create the list to store.
List<String> YrStrList = new List<string>();
// Loop through each item.
foreach (ListItem item in YrChkBox.Items)
{
if (item.Selected)
{
// If the item is selected, add the value to the list.
YrStrList.Add(item.Value);
}
else
{
// Item is not selected, do something else.
}
}
// Join the string together using the ; delimiter.
String YrStr = String.Join(";", YrStrList.ToArray());
// Write to the page the value.
Response.Write(String.Concat("Selected Items: ", YrStr));
}
Убедитесь, что вы используете условие if (!IsPostBack) { }
, потому что, если вы загружаете его на каждую обновленную страницу, это фактически уничтожает данные.
Ответ 2
Попробуйте что-то вроде этого:
foreach (ListItem listItem in YrChkBox.Items)
{
if (listItem.Selected)
{
//do some work
}
else
{
//do something else
}
}
Ответ 3
установите флажок в списке выбранных значений с помощью разделителя
string items = string.Empty;
foreach (ListItem i in CheckBoxList1.Items)
{
if (i.Selected == true)
{
items += i.Text + ",";
}
}
Response.Write("selected items"+ items);
Ответ 4
Элегантным способом реализации этого было бы сделать метод расширения, например:
public static class Extensions
{
public static List<string> GetSelectedItems(this CheckBoxList cbl)
{
var result = new List<string>();
foreach (ListItem item in cbl.Items)
if (item.Selected)
result.Add(item.Value);
return result;
}
}
Затем я могу использовать что-то подобное, чтобы составить строку, все значения разделяются символом ';':
string.Join(";", cbl.GetSelectedItems());
Ответ 5
//Page.aspx//
// To count checklist item
int a = ChkMonth.Items.Count;
int count = 0;
for (var i = 0; i < a; i++)
{
if (ChkMonth.Items[i].Selected == true)
{
count++;
}
}
//Page.aspx.cs//
// To access checkbox list item value //
string YrStrList = "";
foreach (ListItem listItem in ChkMonth.Items)
{
if (listItem.Selected)
{
YrStrList = YrStrList + "'" + listItem.Value + "'" + ",";
}
}
sMonthStr = YrStrList.ToString();
Ответ 6
//aspx.cs
//Загрузите выбранные элементы CheckBoxList в ListBox
int status = 1;
foreach (ListItem s in chklstStates.Items )
{
if (s.Selected == true)
{
if (ListBox1.Items.Count == 0)
{
ListBox1.Items.Add(s.Text);
}
else
{
foreach (ListItem list in ListBox1.Items)
{
if (list.Text == s.Text)
{
status = status * 0;
}
else
{
status = status * 1;
}
}
if (status == 0)
{ }
else
{
ListBox1.Items.Add(s.Text);
}
status = 1;
}
}
}
}