<asp:GridView ID="grdResult" runat="server" AllowPaging="True"
OnPageIndexChanging="grdResult_PageIndexChanging" PageSize="30"></asp:GridView>
- AllowPaging : GridView에 Paging을 허용할지 설정(True, False)
- PageSize : 한 페이지당 보여줄 목록 수를 설정
- OnPageIndexChanging : Paging 이벤트를 처리할 이벤트 함수
1.2 aspx 소스에서 설정해준 OnPageIndexChanging 이벤트에 대한 내용을 aspx.cs에서 정의
protected void grdResult_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
grdResult.PageIndex = e.NewPageIndex; // 새로운 Page Index를 설정
grdResult.DataSource = GetDataSet(); // DataSet을 가져오는 함수를 실행하여
// GridView 객체에 설정
grdResult.DataBind(); // GridView를 다시 바인딩
}
<asp:GridView ID="grdResult" runat="server" AllowSorting="True"
OnSorting="grdResult_Sorting" PageSize="30"></asp:GridView>
- AllowSorting : 정렬 기능을 허용할지 설정(True, False)
- OnSorting : 정렬 기능을 처리할 이벤트 함수
2.2 OnSorting 이벤트에 대한 함수 정의
protected void grdResult_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression;
// GridView 헤더 클릭할 때마다 정렬 방향 설정
if (GridViewSortDirection == SortDirection.Ascending)
{
GridViewSortDirection = SortDirection.Descending;
SortGridView(sortExpression, "DESC"); // 현재 클릭한 헤더 정보와 정렬 방향(DESC) 정보를
// Sorting 처리 함수에 전달
}
else
{
GridViewSortDirection = SortDirection.Ascending;
SortGridView(sortExpression, "ASC"); // 현재 클릭한 헤더 정보와 정렬 방향(ASC) 정보를
// Sorting 처리 함수에 전달
}
}
// 정렬 방향 설정
private SortDirection GridViewSortDirection
{
get
{
if (ViewState["sortDirection"] == null)
ViewState["sortDirection"] = SortDirection.Ascending;
return (SortDirection)ViewState["sortDirection"];
}
set { ViewState["sortDirection"] = value; }
}
// GridView 정렬 적용
private void SortGridView(string sortExpression, string direction)
{
DataTable dt = GetDataSet().Tables[0];
DataView dv = new DataView(dt);
dv.Sort = sortExpression + " " + direction;
grdResult.DataSource = dv;
grdResult.DataBind();
}
<asp:GridView ID="gridDetail" runat="server" AutoGenerateColumns="false"
OnRowDeleting="gridDetail_RowDeleting" OnRowEditing="gridDetail_RowEditing"
OnRowUpdating="gridDetail_RowUpdating" OnRowCancelingEdit="gridDetail_RowCancelingEdit">
<Columns>
<asp:TemplateField HeaderText="ITEM">
<EditItemTemplate>
<asp:TextBox ID="txtItem" runat="server" Text='<%# Eval("data") %>' Width="150px">
</asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblItem" runat="server" Text='<%# Eval("data") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="편집">
<EditItemTemplate>
<asp:ImageButton ID="imgBtnUpdate" runat="server" CausesValidation="True" CommandName="Update" ImageUrl="/img/btn/update.gif"></asp:ImageButton>
<asp:ImageButton ID="imgBtnCancel" runat="server" CausesValidation="False" CommandName="Cancel" ImageUrl="/img/btn/btn_can.gif"></asp:ImageButton>
</EditItemTemplate>
<ItemTemplate>
<asp:ImageButton ID="imgBtnEdit" runat="server" CausesValidation="False" CommandName="Edit" ImageUrl="/img/btn/btn_mod.gif"></asp:ImageButton>
<asp:ImageButton ID="imgBtnDelete" runat="server" CausesValidation="False" CommandName="Delete" ImageUrl="/img/btn/delete.gif"></asp:ImageButton>
</ItemTemplate>
<ItemStyle Width="160px" />
</asp:TemplateField>
</Columns>
</asp:GridView>
- TemplateField : 사용자 정의 필드
- EditItemTeamplate : 편집 상태일 때 보여줄 필드
- ItemTemplate : 편집 상태가 아닌 일반 화면일 때 보여주는 필드
- OnRowDeleting : GridView에 선택 행 삭제할 때 발생하는 이벤트
- OnRowEditing : GridView에서 편집 버튼을 클릭했을 때 발생하는 이벤트
- OnRowUpdating : GridView에서 Update 버튼을 클릭했을 때 발생하는 이벤트
- OnRowCancelingEdit : GridView에서 편집 취소 버튼을 클릭했을 때 발생하는 이벤트
3.2 3.1에 정의한 각 이벤트에 대한 이벤트를 aspx.cs 소스에 정의
// GridView 편집 전환
protected void gridDetail_RowEditing(object sender, GridViewEditEventArgs e)
{
gridDetail.EditIndex = e.NewEditIndex; // 현재 편집을 선택한 행의 Index 설정
gridDetail.DataSource = GetDataSet(); // DataSet 객체 얻어와서 GridView 객체에 설정
gridDetail.DataBind(); // GridView를 다시 재바인딩
}
// GridView 데이터 수정
protected void gridDetail_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int idx = e.RowIndex; // 현재 수정버튼을 클릭한 행의 Index를 얻어옴
// 다음과 같이 GridView의 해당 Index에 대한 데이터를 얻어옴
String data = ((TextBox)gridDetail.Rows[idx].FindControl("data")).Text;
// DB에 저장하는 코드 부분을 이곳에 정의
gridDetail.EditIndex = -1; // 처리 후 -1로 설정하는 이유는 저장 처리 후 다시 일반화면으로
// 전환하기 위함.
gridDetail.DataSource = GetDataSet(); // DataSet 객체 얻어와서 GridView 객체에 설정
gridDetail.DataBind(); // GridView를 다시 재바인딩
}
// GridView 수정 취소
protected void gridDetail_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gridDetail.EditIndex = -1; // -1로 설정하는 이유는 일반화면으로 전환하기 위함.
gridDetail.DataSource = GetDataSet(); // DataSet 객체 얻어와서 GridView 객체에 설정
gridDetail.DataBind(); // GridView를 다시 재바인딩
}
// GridView Row 삭제 이벤트
protected void gridDetail_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int idx = e.RowIndex; // 현재 삭제 버튼을 클릭한 행의 Index를 얻어옴
// 다음과 같이 GridView의 해당 Index에 대한 데이터를 얻어옴
String data = ((TextBox)gridDetail.Rows[idx].FindControl("data")).Text;
// DB에서 삭제하는 코드 부분을 이곳에 정의
gridDetail.EditIndex = -1; // 처리 후 -1로 설정하는 이유는 저장 처리 후 다시 일반화면으로
// 전환하기 위함.
gridDetail.DataSource = GetDataSet(); // DataSet 객체 얻어와서 GridView 객체에 설정
gridDetail.DataBind(); // GridView를 다시 재바인딩
}
private DataSet GetDataSet()
{
// SQL Connection 개체 생성
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MATL_DBConnectionString"].ConnectionString);
// Paramter 정보 설정
String yyyyMM = ((TextBox)Master.FindControl("MainContent").FindControl("txtYYYYMM")).Text;
String year = yyyyMM.Substring(0, yyyyMM.IndexOf("-"));
String month = yyyyMM.Substring(yyyyMM.IndexOf("-") + 1, 2);
String iNo = year + month;
String iSeq = ((TextBox)Master.FindControl("MainContent").FindControl("txtSeq")).Text;
// SQL Command 개체 생성 및 설정
SqlCommand cmd = new SqlCommand("NB1050I_Q", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("iTP", "S1");
cmd.Parameters.AddWithValue("i_no1", iNo);
cmd.Parameters.AddWithValue("i_no2", iSeq);
// SQL DataReader 개체 생성
conn.Open();
SqlDataReader rd = cmd.ExecuteReader(CommandBehavior.CloseConnection);
// Create a DataTable
DataTable table = new DataTable();
// Create a DataColumn and set various properties
DataColumn column1 = new DataColumn();
column1.DataType = Type.GetType("System.String");
column1.AllowDBNull = true;
column1.Caption = "ITEM";
column1.ColumnName = "ITEM";
// Add the column to the table
table.Columns.Add(column1);
for (int i = 1; i <= 12; i++)
{
DataColumn column2 = new DataColumn();
column2.DataType = Type.GetType("System.Decimal");
column2.AllowDBNull = true;
column2.Caption = i.ToString();
column2.ColumnName = i.ToString();
table.Columns.Add(column2);
}
// Add Row and set values
DataRow row;
while (rd.Read())
{
row = table.NewRow();
row["ITEM"] = ((String)rd[1]).Trim();
for (int i = 1; i <= 12; i++)
{
row[i] = String.Format("{0:#,##0}", rd.GetDecimal(i + 1));
}
// Be sure to add the new row to the
// DataRowCollection.
table.Rows.Add(row);
}
DataSet ds = new DataSet();
ds.Tables.Add(table);
// SqlDataReader 개체 닫기 및 SqlConnection 닫기
rd.Close();
conn.Close();
return ds;
}
* 이 포스트는 blogkorea [블코채널 : 프로그램에 대한 개발팁 및 유용한 정보 공유합시다.] 에 링크 되어있습니다.
2008/07/29 - [프로그래밍/ASP .Net] - [ASP.Net2.0] GridView RowSpan 적용예제
2008/08/01 - [프로그래밍/ASP .Net] - [ASP.Net2.0] GridView 행 추가하기
2008/08/01 - [프로그래밍/ASP .Net] - [ASP.Net2.0] GridView 웹 서버 컨트롤에 바인딩된 행에 대한 대량 업데이트 수행
2008/08/11 - [프로그래밍/ASP .Net] - [ASP.Net2.0] 마스터 페이지 사용시 Request 문제
2008/08/11 - [프로그래밍/ASP .Net] - [ASP.Net2.0] GridView를 Excel 출력하기
2008/08/12 - [프로그래밍/ASP .Net] - [ASP.Net2.0] XML 문서 만들기 & 이미지 문서 만들기
2008/08/27 - [프로그래밍/ASP .Net] - [ASP.Net2.0] 웹사이트에 ASP.NET AJAX 사용할 수 있게 설정