Blog Content

    티스토리 뷰

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

    반응형
    추가 버튼을 클릭할때 입력하는 디자인을 추가 시켜줘야 한다.
    추가 버튼 클릭하면 텍스트 박스와 드롭다운 리스트 입력/선택하는 항목이 나와야 한다.
    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);
          }
    }
    반응형

    Comments