asp.net를 오래 하신분도 데이터리스트 컨트롤에 에디트커맨드를 모르시는 경우가 있더라고요 ㅡ.-;;;
데이터리스트에 있는 커맨드 중에 에디트(Edit)와 업데이트(Update)를 이용하면 직관적으로 리스트를 컨트롤할수 있습니다.
<asp:DataList ID="DataList1" runat="server" oneditcommand="DataList1_EditCommand" onupdatecommand="DataList1_UpdateCommand"> <ItemTemplate> <tr> <td> <asp:Label ID="lab1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.colA") %>' /> </td> <td> <asp:Label ID="lab2" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.colB") %>' /> </td> <td> <asp:LinkButton ID="lnkEdit" runat="server" CommandName="Edit" > 수정 </asp:LinkButton> </td> </tr> </ItemTemplate> <AlternatingItemTemplate> <tr> <td> <asp:Label ID="lab1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.colA") %>'></asp:Label> </td> <td> <asp:Label ID="lab2" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.colB") %>'></asp:Label> </td> <td> <asp:LinkButton ID="lnkEdit" runat="server" CommandName="Edit" > 수정 </asp:LinkButton> </td> </tr> </AlternatingItemTemplate> <EditItemTemplate> <tr> <td> <asp:Label ID="lab1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.colA") %>' /> </td> <td> <asp:TextBox ID="TextBox1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.colB") %>' /> </td> <td> <asp:LinkButton ID="lnkEdit" runat="server" CommandName="Update" > 완료 </asp:LinkButton> </td> </tr> </EditItemTemplate> </asp:DataList>
protected void Page_Load(object sender, EventArgs e)
{
//테스트용 데이터셋
DataSet dsTest = new DataSet();
//테이블 생성
dsTest.Tables.Add("tbTest");
//컬럼 생성
dsTest.Tables["tbTest"].Columns.Add("colA");
dsTest.Tables["tbTest"].Columns.Add("colB");
dsTest.Tables["tbTest"].Columns.Add("colC");
//데이터 추가
string[] a = { "0", "첫번째", "두번째" };
dsTest.Tables["tbTest"].Rows.Add(a);
string[] b = { "1", "첫번째", "두번째" };
dsTest.Tables["tbTest"].Rows.Add(b);
string[] c = { "2", "첫번째", "두번째" };
dsTest.Tables["tbTest"].Rows.Add(c);
string[] d = { "3", "첫번째", "두번째" };
dsTest.Tables["tbTest"].Rows.Add(d);
string[] e2 = { "4", "첫번째", "두번째" };
dsTest.Tables["tbTest"].Rows.Add(e2);
string[] f = { "5", "첫번째", "두번째" };
dsTest.Tables["tbTest"].Rows.Add(f);
//데이터 소스 지정
DataList1.DataSource = dsTest;
if (false == this.IsPostBack)
{
//데이터 바인딩
DataList1.DataBind();
}
}
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
{
DataList1.EditItemIndex = e.Item.ItemIndex;
DataList1.DataBind();
}
protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
{
//바인딩된 줄내용을 가저온다.
DataTable dtData = ((DataSet)DataList1.DataSource).Tables["tbTest"];
//데이터를 넣는다.
dtData.Rows[e.Item.ItemIndex]["colB"] = ((TextBox)e.Item.FindControl("TextBox1")).Text;
//일반 인터페이스로 돌려준다.
DataList1.EditItemIndex = -1;
DataList1.DataBind();
}