ASP.NET

GridView 컨트롤을 이용해서 Row행 추가

Godffs 2011. 3. 22. 14:56
반응형
추가 버튼을 클릭할때 입력하는 디자인을 추가 시켜줘야 한다.
추가 버튼 클릭하면 텍스트 박스와 드롭다운 리스트 입력/선택하는 항목이 나와야 한다.
5개까지 추가 가능하고, 저장시 입력된 값은 저장되야 한다.

추가 버튼 클릭시 입력 디자인이 나타나야 되서 GridView 컨트롤 사용




먼저 디자인 한다.

<asp:GridView ID="grdItemTest" runat="server" AutoGenerateColumns="false" HorizontalAlign="Center"

     EmptyDataRowStyle-HorizontalAlign="Center">

        <Columns>

            <asp:TemplateField ItemStyle-HorizontalAlign="Center">

                <ItemTemplate>

                    <asp:CheckBox ID="chkValue" runat='server' />

                </ItemTemplate>

            </asp:TemplateField>

 

            <asp:TemplateField ItemStyle-HorizontalAlign="Center">

                <ItemTemplate>

                    <asp:TextBox ID="txtItem1" runat="server"></asp:TextBox>

                </ItemTemplate>

            </asp:TemplateField>

 

            <asp:TemplateField ItemStyle-HorizontalAlign="Center">

                <ItemTemplate>

                    <asp:DropDownList ID="ddlItem" runat="server">

                        <asp:ListItem Value="1" Selected="True">1</asp:ListItem>

                        <asp:ListItem Value="2">2</asp:ListItem>

                        <asp:ListItem Value="3">3</asp:ListItem>

                    </asp:DropDownList>

                </ItemTemplate>

            </asp:TemplateField>

 

            <asp:TemplateField ItemStyle-HorizontalAlign="Center">

                <ItemTemplate>

                    <asp:TextBox ID="txtItem2" runat="server"></asp:TextBox>

                </ItemTemplate>

            </asp:TemplateField>

        </Columns>

    </asp:GridView>


GridView 컨트롤에서 Column으로 사용할 때 BoundFiled 를 사용하지만 다양한 표현을 위해서 TemplateField 컨트롤을 사용합니다...다양한 방법으로는...색깔을 바꾼다던지...;;;



코드 페이지 입니다...

먼저 Page_Load 이벤트 public static DataSet ItemTemp;을 선언했습니다.  선언한 이유는 데이터 유지

public static DataSet ItemTemp;

 

protected void Page_Load(object sender, EventArgs e)

{

 .... 

 



추가 버튼 클릭시~GridView Row 행 추가 하는 이벤트 작성

추가 버튼 이벤트에 코드 작성
ButtonAdd_Click
{
     DataRow dr;
     if(grdItemTest.Rows.Count > 0)
    {
     for(int i=0; i<grdItemTest.Row.Count; i++)
     {
           TextBox txtInput = (TextBox)grdItemTest.Rows[i].FindControl("txtItem1");
           ...
           ...
           //TextBox txtInput = (TextBox)grdItemTest.Rows[i].FindControl("txtItem1");
           //텍스트박스 컨트롤 선언 명칭 = (텍스트박스컨트롤)그리드뷰의.Row행[i갯수만큼].찾아라("txtItem1이름을
           //가지고 있는 걸");
     }
    }
    else
    {
          dr = ItemTemp.Tables["tbTest"].NewRow();  //임시테이블로 row추가
          ItemTemp.Tables["tbTest"].Row.Add(dr);   //임시테이블에 row행추가 선언
    }
    ItemTemp.AcceptChanges();   //AcceptChanges는 DataRow, DataSet에 있는 메서드로 사용하면 바로
                               //표시되는 머...그런거?...msdn 검색하세요...Orz
    grdItemTest.DataSource = ItemTemp.Tables["tbTest"].DefaultView;
    grdItemTest.DataBind();
}



혹시나~Row행 추가 하고나서 데이터 저장하려는 경우엔...

임시 저장 함수를 추가 했습니다...
private void ItemValueTemp()
{
     ValueTempItemData(grdItemTest, "item");
     grdItemTest.DataSource = ItemTemp;
     grdItemTest.DataBind();
}

private void ValueTempItemData(GridView grdItems, string tbName)
{
     if(ItemTemp != null)
     {
          ItemTemp.Dispose();
     }
      ItemTemp = new DataSet();
      ItemTemp = Tables.Add(tbName);
      for(int i=0; i< grdItems.Columns.Count; i++)
      {
            ItemTemp.Tables[tbName].Columns.Add(grdItemTest.Columns[i].FooterText);
      }
}
반응형