asp.net 2.0에서는 Gridview가 매우 편리합니다. DATASOURCE 시리즈 컨트롤을 추가하면 즉시 Gridview에 바인딩할 수 있어 매우 편리합니다. 하지만 실제로는 datatable이나 dataview를 사용할 수도 있습니다. 이때는 datasource 시리즈 컨트롤을 사용하지 않습니다. asp.net 2.0에서 Gridview 컨트롤의 페이지 넘기기와 각 열의 정렬을 구현하는 방법에 대해 이야기해 보겠습니다.
편집 기능.
먼저 northwind 데이터베이스에서 직원 테이블을 읽습니다. 그리드뷰를 배치한 후 바인딩된 여러 열을 추가하면 코드는 다음과 같습니다.
<asp:GridView ID="GridView1" runat="서버" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="없음"
Width="100%" DataKeyNames="EmployeeID" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnSorting="GridView1_Sorting" PageSize="3" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowCommand="G 제거 View1_RowCommand">
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="흰색" />
<열>
<asp:BoundField DataField="employeeid" HeaderText="직원 ID" ReadOnly="True" />
<asp:BoundField DataField="이름" HeaderText="이름" SortExpression="이름" />
<asp:BoundField DataField="성" HeaderText="성" SortExpression="성" />
<asp:CommandField ShowEditButton="True" />
</열>
<RowStyle BackColor="#FFFFD6" ForeColor="#333333" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="네이비" />
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="가운데" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="흰색" />
<AlternatingRowStyle BackColor="흰색" />
</asp:GridView>
먼저 페이징을 구현하고, AllowPaging을 true로 설정하고, 페이지당 페이징 항목 수를 설정하고, 마지막으로 코드 숨김에 작성해야 합니다.
protected void GridView1_PageIndexChanging(개체 전송자, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
바인드그리드();
}
각 열의 자동 클릭 정렬을 수행하려면 allowedorting=true로 설정한 다음 OnSorting="GridView1_Sorting"을 설정하면 됩니다. 여기서 Gridview_sorting
코드는
protected void GridView1_Sorting(객체 전송자, GridViewSortEventArgs e)
{
ViewState["sortexpression"] = e.SortExpression;
if (ViewState["sortdirection"] == null)
{
ViewState["sortdirection"] = "asc";
}
또 다른
{
if (ViewState["sortdirection"].ToString() == "asc")
{
ViewState["sortdirection"] = "desc";
}
또 다른
{
ViewState["sortdirection"] = "asc";
}
}
바인드그리드();
}
분명히 각 정렬 순서를 저장하기 위해 viewsate를 설정하면 위의 내용이 이해하기 쉽다고 생각합니다.
마지막으로 aspx 페이지에 OnRowEditing="GridView1_RowEditing"이 설정되어 있고 GridView1_RowEditing의 코드가 다음과 같기 때문에 편집 기능이 구현되었습니다.
protected void GridView1_RowUpdating(개체 전송자, GridViewUpdateEventArgs e)
{
int empid;
문자열 fname, lname;
empid = int.Parse(GridView1.Rows[e.RowIndex].Cells[0].Text);
fname = ((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
lname = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text;
SqlConnection cnn = new SqlConnection(@"data source=localhost;초기 카탈로그=northwind;사용자 ID=sa ;비밀번호=123456");
cnn.Open();
SqlCommand cmd = new SqlCommand("업데이트 직원 세트 이름=@fname,성=@lname 직원 whereid=@empid ", cnn);
cmd.Parameters.Add(new SqlParameter("@fname",fname));
cmd.Parameters.Add(new SqlParameter("@lname", lname));
cmd.Parameters.Add(new SqlParameter("@empid", empid));
cmd.ExecuteNonQuery();
cnn.Close();
GridView1.EditIndex = -1;
바인드그리드();
}
protected void GridView1_RowEditing(개체 전송자, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
바인드그리드();
}
protected void GridView1_RowCancelingEdit(개체 전송자, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
바인드그리드();
}
보시다시피 위의 코드는 실제로 asp.net 1.1 버전과 동일합니다. 마지막으로, Bindgrid()의 프로세스는 매우 간단합니다.
DataSet ds = 새로운 DataSet();
SqlDataAdapter da = new SqlDataAdapter("직원에서 * 선택", @"data source=localhost;초기 카탈로그=northwind;user id=sa;password=123456");
da.Fill(ds,"직원");
DataView dv = ds.Tables[0].DefaultView;
if (ViewState["sortexpression"] != null)
{
dv.Sort = ViewState["sortexpression"].ToString() + " " + ViewState["sortdirection"].ToString();
}
GridView1.DataSource=dv;
GridView1.DataBind();
여기서는 그리드뷰가 데이터뷰에 바인딩되어 있으며 dv.sort는 각 정렬 순서를 설정하는 데 사용됩니다. 즉, 각 정렬 후에도 순서는 변경되지 않습니다.
물론 마지막은 page_load 이벤트입니다.
protected void Page_Load(개체 전송자, EventArgs e)
{
if(!IsPostBack)
{
바인드그리드();
}
}