1. initGrid() 에서는 동적이지 않은 컬럼에 ComboBox 설정하는 경우.

2. paraGrid_CellClick 은 ComboBox가 동적으로 변경이 필요한 경우.

// 초기화
private void initGrid() {
  // 컬럼을 자동생성하지 않기 위해 설정.
  grid.ActiveSheet.AutoGenerateColumns = false; 
  
  // ComboBox 적용을 위해서 false 설정. 풀면, ComboBox 적용이 안되고, Text로 작동함.
  grid.ActiveSheet.DataAutoCellTypes = false;
  
  // add 컬럼
  // 중략
  
  // 컬럼중에 콤보셀 설정
  ComboBoxCellType sumtyp = new ComboBoxCellType {
    Items = (from DataRow row in _SumTypDT.Rows select row["ITEM_CD"].ToString()).ToArray()
    };
  grid.ActiveSheet.Columns[2].CellType = sumtyp;

}

// 셀선택 시 콤보박스를 동적을 변경함.
private void paraGrid_CellClick(object sender, CellClickEventArgs e)
{
  if (e.Column == 1 && e.View.Owner.DataSource != null) // AnalType 설정
  {
    DataTable dataTable = (DataTable) e.View.Owner.DataSource;
    DataRow row = dataTable.Rows[e.Row];
    string grp1 = Convert.ToString(row["컬럼A"]);
    ComboBoxCellType sumtyp = null;
    if ("값A".Equals(grp1))
    {
      sumtyp = new ComboBoxCellType {
                Items = (from DataRow dr in _AnalTypDT.Rows where dr.Field<string>("ITEM_CD") == "LOT" select dr["ITEM_CD"].ToString()).ToArray()
          };
    }
    else
    {
      sumtyp = new ComboBoxCellType {
                Items = (from DataRow dr in _AnalTypDT.Rows select dr["ITEM_CD"].ToString()).ToArray()
          };
    }

    e.View.Owner.ActiveSheet.Cells[e.Row, e.Column].CellType = sumtyp;
  }
}

end.

728x90

fix spread column size.

 

그리드에 DataSource가 binding되면, Column의 사이즈가 자동으로 변함. 

사이즈를 고정하기 위한 설정코드.

 

2개 모두 설정해야 효과있음.

  grid.AllowColumnWidthAutofit = false;         // 컬럼 resize 방지위해 설정.
  grid.ActiveSheet.DataAutoSizeColumns = false; // 컬럼 resize 방지위해 설정.

 

end.

 

728x90

'Programming Language > C#' 카테고리의 다른 글

offline .net 3.5 설치  (0) 2020.07.30
[grapecity/farpoint] ComboBoxCellType 처리.  (0) 2020.07.08
spread 에서 sheet 복사  (0) 2020.06.18
DataTable의 DataRow값을 빠르게 변경하기.  (0) 2020.06.05
DataTable 데이터 복제  (0) 2020.06.03

--- 8 버전에서는 단순이 Clone 메소드 호출하면 됨.

SheetView sheet = grid_Sheet1.Clone();

 

 

--- 아래는 예전 버번

 

http://blog.daum.net/lsj8601/44

 

 

fpspread관련 sheet copy 퍼옴

private void button1_Click(object sender, EventArgs e)        {            FarPoint.Win.Spread.SheetView sv = new FarPoint.Win.Spread.SheetView();            sv = CopySheet..

blog.daum.net

 

 

fpspread관련 sheet copy 퍼옴

private void button1_Click(object sender, EventArgs e)        {            FarPoint.Win.Spread.SheetView sv = new FarPoint.Win.Spread.SheetView();            sv = CopySheet..

blog.daum.net

 

 

728x90

1. DataRow의 각 컬럼값을 변경하기 전에,  BeginEdit(), EndEdit() 를 호출한다.

2. 만약 대량을 데이터를 반복적으로 처리한다면, 해당하는 전체 DataRow를 BeingEdit() 설정후, 작업 종료 후 다시 전체 DataRow를 EndEdit() 처리한다.

3. AcceptChanges 호출 시 EndEdit()가 내부적으로 호출되지만, EndEidt() 후, AcceptChanges를 호출하는게 속도가 괜찮았다.

 

        private void btnCopy_Click(object sender, EventArgs e)
        {
            DataTable dt2 = dt.Copy();

            Debug.WriteLine("테이블 복사");

            Stopwatch sw2 = new Stopwatch();
            sw2.Start();

            // 작업이 dt2의 각 행값을 반복으로 업데이트한다고 가정할 때!!!!

            // 1. 전체 row를 편집모드로 변경함.
            foreach (DataRow row in dt2.Rows)
            {
                row.BeginEdit();
            }

            // 2. DataRow의 각 컬럼값을 반복적으로 수정한다.
            for (int operIdx = 0; operIdx < COLS_OPER; operIdx++)
            {
                for (int rowIdx = 0, n = dt2.Rows.Count; rowIdx < n; rowIdx++)
                {
                    string sqlFormat = String.Format("COL{0}_0 = '{1}'", operIdx, dt2.Rows[rowIdx][operIdx * COLS_NUM]);
                    DataRow[] rows = dt2.Select(sqlFormat);
                    foreach (DataRow selectRow in rows)
                    {
                        for (int k = 0; k < COLS_NUM; k++)
                        {
                            selectRow["COL" + operIdx + "_" + k] = dt.Rows[rowIdx][operIdx * COLS_NUM + k];
                        }
                    }

                }
                //Debug.Write(operIdx);
            }

            // 3. 전체 row를 편집모드 종료함.
            foreach (DataRow row in dt2.Rows)
            {
                row.EndEdit();
            }
            dt2.AcceptChanges();

            sw2.Stop();
            Debug.WriteLine("\n검색후복사1: " + sw2.Elapsed.ToString());

            sw2.Restart();
            grid1.DataSource = dt2;
            sw2.Stop();
            Debug.WriteLine("\n검색후복사2: " + sw2.Elapsed.ToString());
        }
728x90

'Programming Language > C#' 카테고리의 다른 글

[grapecity/farpoint] fix spread column size  (0) 2020.07.08
spread 에서 sheet 복사  (0) 2020.06.18
DataTable 데이터 복제  (0) 2020.06.03
NLog 사용 샘플  (0) 2020.04.25
[펌] Correlation of two arrays in C#  (0) 2020.02.06

+ Recent posts