Programming/ASP

[Asp.net] Repeater를 이용한 동적 컬럼바인딩

Foolishdevil 2014. 2. 2. 19:29

 Repeater 에서 동적으로 컬럼 바인딩을 해야되는 경우, Literal을 이용하여 처리할 수 있다. 


<div>

    <table>

<tr>

   <th>Id </th>

   <th>Name</th>

   <th>Marks1</th>

   <th>Marks2</th>

   <th>Matks3</th>

</tr>

<asp:Repeater ID="rptDemo" runat="server">

   <ItemTemplate>

<asp:Literal ID="rptContents" runat="server" OnDataBinding="rptContents_DataBinding"></asp:Literal>

   </ItemTemplate>

</asp:Repeater>

    </table>

</div>


private int Cnt = 0;
protected void rptContents_DataBinding(object sender, EventArgs e)
{
    Literal lt = (Literal)sender;
    _repeaterCount++;
    if (_repeaterCount % _repeaterTotalColumn == 1)
	lt.Text = "";
    lt.Text += string.Format("{0}", Eval("ID").ToString());
    lt.Text += string.Format("{0}", Eval("NAME").ToString());
    lt.Text += string.Format("{0}", Eval("MARKS1").ToString());
    lt.Text += string.Format("{0}", Eval("MARKS2").ToString());
    lt.Text += string.Format("{0}", (string.Equals(Cnt, 1) ? Eval("MARKS3").ToString() : Eval("MARKS4").ToString()));
    lt.Text += "";
}

private DataTable CreateDataTable()
{
    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("ID", typeof(string)));
    dt.Columns.Add(new DataColumn("NAME", typeof(string)));
    dt.Columns.Add(new DataColumn("MARKS1", typeof(string)));
    dt.Columns.Add(new DataColumn("MARKS2", typeof(string)));
    dt.Columns.Add(new DataColumn("MARKS3", typeof(string)));
    dt.Columns.Add(new DataColumn("MARKS4", typeof(string)));


    DataRow row = dt.NewRow();
    row["ID"] = "1"; row["NAME"] = "홍길동"; row["MARKS1"] = "1-1"; row["MARKS2"] = "1-2"; row["MARKS3"] = "1-3"; row["MARKS4"] = "1-4";
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["ID"] = "2"; row["NAME"] = "홍길동"; row["MARKS1"] = "2-1"; row["MARKS2"] = "2-2"; row["MARKS3"] = "2-3"; row["MARKS4"] = "2-4";
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["ID"] = "3"; row["NAME"] = "홍길동"; row["MARKS1"] = "3-1"; row["MARKS2"] = "3-2"; row["MARKS3"] = "3-3"; row["MARKS4"] = "3-4";
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["ID"] = "4"; row["NAME"] = "홍길동"; row["MARKS1"] = "4-1"; row["MARKS2"] = "4-2"; row["MARKS3"] = "4-3"; row["MARKS4"] = "4-4";
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["ID"] = "5"; row["NAME"] = "홍길동"; row["MARKS1"] = "5-1"; row["MARKS2"] = "5-2"; row["MARKS3"] = "5-3"; row["MARKS4"] = "5-4";
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["ID"] = "6"; row["NAME"] = "홍길동"; row["MARKS1"] = "6-1"; row["MARKS2"] = "6-2"; row["MARKS3"] = "6-3"; row["MARKS4"] = "6-4";
    row = dt.NewRow(); 
    return dt;
}


Repeater를 DataBinding 하는 부분입니다. 

...

rptDemo.DataSource = CreateDataTable();

rptDemo.DataBinding();

...