본문 바로가기

개발 Tip/ASP .Net

[ASP.Net2.0] GridView 행 추가하기

* GridView 수동 행 추가

GridView에서 특정 버튼을 눌러서 행추가를 할려고 근 1주일넘게 삽질을 하다가 하나의 꼼수를 생각해냈다 --;;
여기저기 자료를 찾아보니
SqlDataSource를 사용하면 insert() 함수로 간단히 추가가 가능한 거 같은데
살펴보니 내가 원하는 방식은 아니다.
내가 원하는 방식은 따로 버튼을 두어 해당 버튼이 클릭이 되면 행이 추가가 되도록 하고 싶었는데
머리가 둔한건지 근 1주일 넘게 삽질하다 생각해낸게 아래 소스 방식이다 ㅡ,.ㅡ

하아~ 벌써 끝날 프로젝트인데 종료가 안된 상황에서 다른 프로젝트 투입되느라 작업시간도 없거니와
ASP.Net은 이번에 처음 만지는거라 작업시간이 오래 걸리네 (원래 난 JSP, JAVA만 쭈욱 해왔다;;)

1. 행추가 꼼수를 위해 aspx 소스 아무 위치에 HiddenField를 다음과 같이 하나 둔다.

   <asp:HiddenField ID="rowcnt" runat="server" Value="0" />

2. aspx.cs 파일에 버튼 클릭 이벤트 함수에 다음과 같이 작업

    protected void imgBtnInsRow_Click(object sender, ImageClickEventArgs e)
    {
        int curRowCnt =             
               int.Parse(((HiddenField)Master.FindControl("MainContent").FindControl("rowcnt")).Value);

        curRowCnt = curRowCnt + 1;

        ((HiddenField)Master.FindControl("MainContent").FindControl("rowcnt")).Value = curRowCnt.ToString();

        insertRow();
    }

3. insertRow() 함수

   private void insertRow()
    {
        int curRowCnt =
             int.Parse(((HiddenField)Master.FindControl("MainContent").FindControl("rowcnt")).Value);

        // 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;
        for (int i = 0; i < curRowCnt; i++)
        {
            row = table.NewRow();
            row["ITEM"] = "";

            for (int j = 1; j <= 12; j++)
            {

                row[j] = 0;
            }

            // Be sure to add the new row to the
            // DataRowCollection.
            table.Rows.Add(row);
        }

        DataSet ds = new DataSet();
        ds.Tables.Add(table);

        gridDetail.DataSource = ds;
        gridDetail.DataBind();
    }

--> 위 소스에 대해서 간략하게 설명을 하면 행추가 버튼을 클릭을 하면 HiddenField인 rowcnt를 1씩 증가시키고 그 값을 insertRow() 함수 빨간색 부분 첫번째 for문에서 사용한다.
행추가 버튼을 눌러 증가된 rowcnt만큼 반복하면서 행을 하나씩 추가한다.

아무리 생각해도 허접한 삽질소스이지만 일단 원하는 행추가는 되니까 뭐 일단은 이렇게라도 쓰자;;