ASP.NET C #에서 foreach를 사용하여 CheckBoxList에서 선택한 항목의 값을 얻는 방법은 무엇입니까?
다음과 같은 CheckBoxList가 있습니다.
<asp:CheckBoxList ID="CBLGold" runat="server" CssClass="cbl">
<asp:ListItem Value="TGJU"> TG </asp:ListItem>
<asp:ListItem Value="GOLDOZ"> Gold </asp:ListItem>
<asp:ListItem Value="SILVEROZ"> Silver </asp:ListItem>
<asp:ListItem Value="NERKH"> NE </asp:ListItem>
<asp:ListItem Value="TALA"> Tala </asp:ListItem>
<asp:ListItem Value="YARAN"> Sekeh </asp:ListItem>
</asp:CheckBoxList>
이제 foreach를 사용하여이 CheckBoxList에서 선택한 항목의 값을 가져 와서 값을 목록에 넣고 싶습니다.
참고 : 짧은 코드를 선호합니다.
짧은 코드를 선호합니다.
List<ListItem> selected = CBLGold.Items.Cast<ListItem>()
.Where(li => li.Selected)
.ToList();
또는 간단한 foreach
:
List<ListItem> selected = new List<ListItem>();
foreach (ListItem item in CBLGold.Items)
if (item.Selected) selected.Add(item);
당신이 원하는 경우 ListItem.Value
:
List<string> selectedValues = CBLGold.Items.Cast<ListItem>()
.Where(li => li.Selected)
.Select(li => li.Value)
.ToList();
좋은 오후입니다. 항상 약간의 LINQ를 사용하여 선택한 목록 항목을 가져온 다음 결과로 원하는 작업을 수행 할 수 있습니다.
var selected = CBLGold.Items.Cast<ListItem>().Where(x => x.Selected);
// work with selected...
foreach (ListItem item in CBLGold.Items)
{
if (item.Selected)
{
string selectedValue = item.Value;
}
}
여기 제안에 따라 .NET에서 상속되는 모든 형식에 대해 LINQ를 사용하여 선택한 항목의 목록을 반환하는 확장 메서드를 추가했습니다 .System.Web.UI.WebControls.ListControl
모든 ListControl
개체에는 Items
유형 의 속성이 ListItemCollection
있습니다. 각각에 속성 이있는의 ListItemCollection
컬렉션을 노출합니다 .ListItems
Selected
C 샤프 :
public static IEnumerable<ListItem> GetSelectedItems(this ListControl checkBoxList)
{
return from ListItem li in checkBoxList.Items where li.Selected select li;
}
비주얼 베이직 :
<Extension()> _
Public Function GetSelectedItems(ByVal checkBoxList As ListControl) As IEnumerable(Of ListItem)
Return From li As ListItem In checkBoxList.Items Where li.Selected
End Function
그런 다음 두 언어 중 하나에서 다음과 같이 사용하십시오.
myCheckBoxList.GetSelectedItems()
List<string> values =new list<string>();
foreach(ListItem Item in ChkList.Item)
{
if(Item.Selected)
values.Add(item.Value);
}
이 스레드는 많은 좋은 예에서 단연 최고였습니다!
내가 실행 한 한 가지 예는 나를 위해 일하지 않았고 디버깅 시간을 보냈습니다. 세계의 모든 이유로 왜 내가 내 확인란 목록에서 선택한 값을 얻었는지 이해할 수 없었습니다. 내 마스터 페이지 때문 이었나요? 아니면 AjaxControlkit과 함께 ModalPopup을 사용했거나 데이터베이스 쿼리에서 체크 박스 목록을 만들 때 올바른 방향으로 가고 있었나요?
나는 마침내 내가이 모든 것에서 중요한 부분을 놓쳤다는 것을 깨달았다 ...
내 코드 숨김에서 Page_Load 이벤트의 sql db에서 체크 박스 목록을 만들었고 button_click 이벤트에서 모든 값을 체크 박스 목록 등에서 가져 왔습니다.
그래서 체크 박스를 몇 개 선택한 다음 버튼을 클릭했을 때 가장 먼저 발생한 것은 내 page_load 이벤트가 체크 박스 목록을 다시 생성하여 체크 박스 값 가져 오기를 실행할 때 체크 박스를 선택하지 않은 것입니다. page_load 이벤트에 추가하지 못했습니다. if (! this.IsPostBack)
내 실수 와이 답변이 일부 디버깅 시간을 최소화하는 데 도움이되기를 바랍니다.
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
// db query and create checkboxlist and other
SqlConnection dbConn = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
string query;
try
{
query = "SELECT [name], [mail] FROM [users]";
dbConn.Open();
SqlDataAdapter da = new SqlDataAdapter(query, dbConn);
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].Rows.Count != 0)
{
checkboxlist1.DataSource = ds;
checkboxlist1.DataTextField = "name";
checkboxlist1.DataValueField = "mail";
checkboxlist1.DataBind();
}
else
{
Response.Write("No Results found");
}
}
catch (Exception ex)
{
Response.Write("<br>" + ex);
}
finally
{
dbConn.Close();
}
}
}
protected void btnSend_Click(object sender, EventArgs e)
{
string strChkBox = string.Empty;
foreach (ListItem li in checkboxlist1.Value)
{
if (li.Selected == true)
{
strChkBox += li.Value + "; ";
// use only strChkBox += li + ", "; if you want the name of each checkbox checked rather then it's value.
}
}
Response.Write(strChkBox);
}
그리고 출력은 예상대로 메일 전송 기능에서 사용할 세미콜론으로 구분 된 목록이었습니다.
bill@contoso.com; jeff@corp.inc; sam@dot.net
작은 문제에 대한 긴 답변. 나는 이것에 대한 전문가와는 거리가 멀고 이것보다 더 나은 해결책이 있다는 것을 알고 있지만 일부에게는 도움이 될 수 있습니다.
To top up on @Tim Schmelter, in which to get back the List<int>
instead,
List<string> selectedValues = CBLGold.Items.Cast<ListItem>()
.Where(li => li.Selected)
.Select(li => li.Value)
.Select(int.Parse)
.ToList();
string s= string.Empty
for (int i = 0; i < Chkboxlist.Items.Count; i++)
{
if (Chkboxlist.Items[i].Selected)
{
s+= Chkboxlist.Items[i].Value + ";";
}
}
'IT박스' 카테고리의 다른 글
Cocoa에서 NSTableView 행을 두 번 클릭 하시겠습니까? (0) | 2020.11.03 |
---|---|
scipy : 프레임, 축, 콘텐츠 만없는 savefig (0) | 2020.11.03 |
내 application.properties 파일의 Spring Boot 앱에서 HikariCP를 어떻게 구성합니까? (0) | 2020.11.03 |
Swift (iOS)에서 라디오 버튼과 체크 박스를 만드는 방법은 무엇입니까? (0) | 2020.11.03 |
SQL Server : 테이블의 최대 행 수 (0) | 2020.11.03 |