Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

[C#] FlexGrid DATA CLEAR

2016. 3. 21. 18:22programming/c#

728x90

flexgrid 뷰를 이용하여 데이터 바인딩 및 출력할 경우


새로 고침 역할을 하는 DATA ALL CLEAR or RESET 이 필요합니다.


저는 아래와 같은 방법으로 해결했습니다.



Navigator를 사용안한 경우에


int Rows = FlexGridView.Rows.Count - 1;
                FlexGridView.Rows.RemoveRange(1, Rows);


해당 그리드뷰의 Rows를 변수로 저장합니다. 이때 -1을 해주는 이유는

Cloumn Header를 1개 있는 경우로 인식하기 때문에 -1 합니다.


RemoveRange로 1부터 Rows 까지범위 삭제하여 데이터를 올클리어 합니다.



두번째 방법은


Navigator를 사용하여 페이징 한 경우



위와 같은 RemoveRange를 이용하면 오류가 납니다.


아래는 navigator 에 페이징 하는 로직과 데이터 리셋하는 로직이 함께 있습니다.


#region [Method] BindingNavigatorPaging
        public void BindingNavigatorPaging(DataSet ParamDataset, C1.Win.C1FlexGrid. C1FlexGrid grid,BindingNavigator navigator)
        {
            try
            {
              

                int counter = 0;
                DataTable dt = null ;
                Flexgrid = grid;

                int Count = grid.Rows.Count;
                if (Count > 0)
                for (int i = 1; i < Count; i++)
                {
                    grid.Rows.Remove(1); 
                }

                if (ParamDataset != null )
                {
                    foreach (DataRow dr in ParamDataset.Tables[0].Rows)
                    {
                        if (counter == 0)
                        {
                            dt = ParamDataset.Tables[0].Clone();
                            tables.Add(dt);
                        }
                        dt.Rows.Add(dr.ItemArray);
                        ++counter;
                        if (counter > 9)
                        {
                            counter = 0;
                        }
                    }
                    navigator.BindingSource = Bindingsource;
                    Bindingsource.DataSource = tables;
                    Bindingsource.PositionChanged += bs_PositionChanged;
                    bs_PositionChanged(Bindingsource, EventArgs.Empty);
                }
                else
                {
                    navigator.BindingSource = null;
                    Bindingsource.DataSource = null;
                    Flexgrid.DataSource = null;
                }
            }
            catch (Exception ex)
            {
                using (ClsError _clserror = new ClsError())
                {
                    _clserror.ErrorLogFileSave(ex);
                }
            }
        }






                int Count = grid.Rows.Count;
                if (Count > 0)
                for (int i = 1; i < Count; i++)
                {
                    grid.Rows.Remove(1); 
                }
 이부분이 Navitagor를 이용하였을 경우 데이터를 올 클리어 하는 방법으로 사용하였습니다.

Flexgrid뷰에선 Remove() 하면 해당 Rows 가 한 행씩 지워지면서 다시 데이터가 위로 정렬됩니다.

예 )

1  A
2  B
3  C

Flexgrid.Rows.Remove(0); 하는 경우
1 행에 A 가 지워지면서

1행자리에 B가 올라가고 , 2행 자리에 C가 자리하게 됩니다.

 따라서 i로 변수 넘겨주면 안되고

고정값을 지정해야 합니다.

Column Header를 놔두고 지우려면 0이 아닌 1로 지정해야 합니다.

grid.Rows.Remove(1);



728x90