2010. 2. 5. 17:13

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(); 
    }

 


각 행에서 값을 체크하면 아래와 같이 어떤 값들이 체크되었는지 알 수 있다. 

출처 : http://blog.naver.com/newcomsa/30019305168