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(); }
다른것을 수정하려고하자 초기화되버리죠.