DataList컨트롤에 추가한 체크박스의 체크된 값을 전부 검색해서 처리해야하는 경우

마스터페이지를 사용하건 하지 않건 FindControl을 사용해서 현재 사용자가 선택한 체크박스의 값을
알 수 있다. 예를 들면 아래와 같이 DataList컨트롤을 사용해서 코딩을 하고 바인딩을 했다고 하면 데이타리스트컨트롤에 바인딩한 Checkbox컨트롤의 선택된 값을 알아와야 하는 경우 다음과 같은 코드를 사용할 수 있다.
<%@ Page Language="C#" MasterPageFile="~/TestMulti/testMaster.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="TestMulti_Default" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:DataList ID="DataList1" runat="server" Width="300">
<HeaderTemplate>
<table>
<tr>
<td>선택</td>
<td>이름</td>
<td>설명</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:CheckBox ID="chk" runat="server" Text="선택" /></td>
<td><%#Eval("Name")%></td>
<td><%#Eval("Description")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:DataList>
<br />
<asp:Button ID="btnTest" runat="server" Text="체크된 값 가져오기" OnClick="btnTest_Click" />
<br />
<asp:Literal ID="ltrScript" runat="server"></asp:Literal>
</asp:Content>
체크된 체크박스를 리스트 형태로 얻어오기 위해서 아래의 코드를 사용한다.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBind();
}
}
protected void DataBind()
{
DataTable dt = new DataTable();
dt.Columns.Add("Name", Type.GetType("System.String"));
dt.Columns.Add("Description", Type.GetType("System.String"));
for (int i = 0; i < 10; i++)
{
DataRow row = dt.NewRow();
row["Name"] = "제품 이름 " + i.ToString();
row["Description"] = "이 제품은..." + i.ToString();
dt.Rows.Add(row);
}
DataList1.DataSource = dt;
DataList1.DataBind();
}
protected void btnTest_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
int cnt = 0;
for (int i = 0; i < DataList1.Items.Count; i++)
{
if (((CheckBox)DataList1.Items[i].FindControl("chk")).Checked == true)
sb.Append(i.ToString() + " 번");
}
ltrScript.Text = sb.ToString();
}
각 행에서 값을 체크하면 아래와 같이 어떤 값들이 체크되었는지 알 수 있다.