퇴근5분전

전에 데이타그리드뷰를 다뤄보다가 열이동을 보다가 직접 만들어본 메서드임.



// 데이타 테이블에 담긴 컬럼을 위치를 바꾸는 메서드.  
  private DataTable ChangColumn(DataTable  sourceDt ,int ColumnIndex1 , int ColumnIndex2 )
   {
    DataTable dt  = new DataTable();
    if( sourceDt == null) return dt;

    for(int i = 0; i < sourceDt.Columns.Count ; i ++)
    {
     if( i == ColumnIndex1)
     {
      dt.Columns.Add( sourceDt.Columns[ ColumnIndex2 ].ColumnName );
     }
     else if ( i == ColumnIndex2 )
     {
      dt.Columns.Add( sourceDt.Columns[ ColumnIndex1 ].ColumnName );
     }    
     else
     {
      dt.Columns.Add( sourceDt.Columns[i].ColumnName );
     }
    }

    foreach( DataRow dr  in sourceDt.Rows )
    {
     DataRow insertDr  =  dt.NewRow();

     for(int j = 0; j < dr.ItemArray.Length ; j ++)
     {
      if( j == ColumnIndex1)
      {
       insertDr[j] = dr[ ColumnIndex2 ];
      }
      else if ( j == ColumnIndex2 )
      {
       insertDr[j] = dr[ ColumnIndex1 ];      
      }     
      else
      {
       insertDr[j] = dr[ j ];      
      }
     }
     dt.Rows.Add( insertDr );
    }

    return dt;

   }


//  datatable.Rows.Insert() 와  datatable.ImportRow()
에서

같은 Hash코드를 가진(동일 메모리 공간) Row를 DataTable에 입력시

ImportRow는 적용되지만 Insert()는 안됨.

해당 RowCollection 과 관련되어
Insert시 해당 컬렉션에 DataRow가 존재하며 에러 반환.
Import는 있든 없든 무조건 DataRow를 복사해서 추가함.

ex)
  1 : DataRow drd  = ds.Tables[0].NewRow();
  2 :   DataRow drd  = ds.Tables[0].Rows[0];

 ds.Tables[0].Rows.Add( drd); 
 ds.Tables[0].ImportRow( drd );  

2 -> Add나 Insert 는 안들어감. Import는 들어감.


'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글

드래그 앤 드랍!  (0) 2009.05.09
Ms-Sql을 띠우자!  (0) 2009.05.08
이벤트  (0) 2009.05.08
Enum 과 Enum 비트 마스크  (0) 2009.05.08
Xml 직렬화...  (0) 2009.05.08