다른 건 생략하고 중요 소스만 붙여 놓겠습니다.
<ASP페이지>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="emp_no" onrowediting="GridView1_RowEditing"
AllowSorting="true" onsorting="GridView1_Sorting"
onrowcancelingedit="GridView1_RowCancelingEdit"
onrowupdating="GridView1_RowUpdating" >
<Columns>
<asp:BoundField DataField="emp_no" HeaderText="社員番号" ReadOnly="True"
SortExpression="emp_no" />
<asp:TemplateField HeaderText="プロジェクト種別" SortExpression="pj_kind">
<ItemTemplate>
<%# Eval("pj_kind")%>
</ItemTemplate>
<EditItemTemplate>
<asp:textbox id="pj_kind_edit" text='<%#Eval("pj_kind")%>' width="60"
runat="server"/>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField ButtonType="Button" ShowEditButton="true"
EditText="修正" UpdateText="完了" CancelText="取消"/>
</Columns>
</asp:GridView>
빨간 색으로 칠한 부분이 내가 수정을 하고 싶은 부분입니다.
<asp:CommandField>의 ShowEditButton을 true로 주시면 해당 CommandField에 수정 버튼이 달리게 됩니다..
그러나 클릭을 해보면 에러가 발생 할 것입니다.. 해당 이벤트가 안 달려 있기 때문에...
수정버튼 클릭, 수정 후 확인, 수정 취소의 세 가지의 이벤트가 필요 할 것입니다..
onrowediting="GridView1_RowEditing"
onrowupdating="GridView1_RowUpdating"
onrowcancelingedit="GridView1_RowCancelingEdit"
각 각의 아이들 입니다.. 위에 소스를 보면 GridView 선언부분에 선언 되어 있습니다.
이제 에러 제어는 되고 이런 이런 이벤트를 줄 것이다- 라고는 했는데 구체적으로 어떤 기능을 할 것인지 써나가야겠죠?
그럼 cs단의 코딩입니다.
세 개의 이벤트를 각각 나눠서 보죠..
<cs단 C#>
- onrowediting="GridView1_RowEditing"
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
this.GridView1.EditIndex = e.NewEditIndex;
DBind();
}
이런 코딩이 나오게 됩니다.
현재 그리드뷰의 에디트인덱스에 새로운 에디트 인덱스를 발생시키죠.
DBind()는 DB연결부분을 메서드로 만들어 놓은 건데 글 맨 밑에 붙여 놓겠습니다..
- onrowupdating="GridView1_RowUpdating"
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
tableAdapterManager.ProjectManagerTableAdapter =
new ProjectManagerTableAdapter();
tableAdapterManager.ProjectManagerTableAdapter.GetProjectInfo(pmSystemDataSet.ProjectManager);
GridViewRow thisrow = GridView1.Rows[e.RowIndex];
string rowpk = GridView1.DataKeys[e.RowIndex].Value.ToString();
TextBox pj_kind_edit = (TextBox)thisrow.FindControl("pj_kind_edit");
if (pmSystemDataSet.ProjectManager.Rows.Count > 0)
{
foreach (PMSystemDataSet.ProjectManagerRow row in pmSystemDataSet.ProjectManager)
{
if (row.emp_no == rowpk)
{
row["pj_kind"] = pj_kind_edit.Text;
break;
}
}
using (TransactionScope scope = new TransactionScope())
{
tableAdapterManager.UpdateAll(pmSystemDataSet);
scope.Complete();
}
}
this.GridView1.EditIndex = -1;
DBind();
}
우선 데이터를 바인딩 시킨 다음에
현재행과 -> GridViewRow thisrow = GridView1.Rows[e.RowIndex];
디비 업데이트시 where 절에 갈 프라이머리 키를 구합니다.
-> string rowpk = GridView1.DataKeys[e.RowIndex].Value.ToString();
그 다음에 아래 소스와 같이 텍스트창에 수정해 넣은 값을 구합니다.
TextBox pj_kind_edit = (TextBox)thisrow.FindControl("pj_kind_edit");
FindControl의 괄호 안에 들어가는 아이는 EditItemTemplate의 아이디가 됩니다...
그 이후에 Row가 있으면 하고 if문 안으로 들어가서 연결되있는 DB를 확인해서 같은 프라이머리 키가 확인 되면 해당 하는 아이를 업데이트 시킵니다..
그리고 트랜젝션을 발생 시키는 작업인데..
TransactionScope <- 이 아이를 사용하려면 프로젝트의 References폴더를 우클릭해서 Add_References를 클릭합니다.. 거기서 System.Transactions 라는 아이를 추가 시켜 주면 됩니다. 그리구선 현재 cs페이지위에 사용하겠다하고 임포팅 시켜줘야겠죠
using System.Transactions;
이런 식으로 말이죠..
- onrowcancelingedit="GridView1_RowCancelingEdit"
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
this.GridView1.EditIndex = -1;
DBind();
}
보시면 다 아실 듯 합니다만.. 현재 인덱스의 바로 전으로가는 코딩이죠.. 편집화면 전으로 이동이죠.. 하지만 마지막으로 데이터바인딩은 꼭 할 것.
그럼 소스에서 계속 붙어 있는 DBind() 메서드 입니다.
DataSet을 만들어서 AdapterManager를 이용해 연결해 주는 방식이죠..
private PMSystemDataSet pmSystemDataSet = new PMSystemDataSet();
private TableAdapterManager tableAdapterManager = new TableAdapterManager();
private void DBind()
{
tableAdapterManager.ProjectManagerTableAdapter =
new ProjectManagerTableAdapter();
tableAdapterManager.ProjectManagerTableAdapter.GetProjectInfo(pmSystemDataSet.ProjectManager);
this.GridView1.DataSource = pmSystemDataSet.ProjectManager;
this.GridView1.DataBind();
}
'IT정보' 카테고리의 다른 글
GridView 하나만으로 프로젝트를 하면서... (0) | 2009.04.28 |
---|---|
DataSet을 이용한 정렬(소트), 페이징 구현 (0) | 2009.04.17 |
문자로 된 데이터를 넘길 때 인코딩(Encoding) 방법에 대해서.. (0) | 2009.04.16 |
List Bound Controls 비교 (0) | 2009.04.15 |
Spring 어플리케이션 프레임워크 모듈 구성 (0) | 2008.08.11 |