ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • .NET 1-Dimensional Array <-> Example Source of Transformation Between DataTable
    IT Story/C# & WPF 2022. 6. 19. 21:24
    반응형
    public DataTable fun1ArrayToDataTable(string[] sArrData, int nColumnCount, params string[] sArrColumnHeader)
            {
                int nRowCount = 0;
                int nIndex = 0;
                try
                {
                    //1차원배열이 Null이거나 데이터가 없으면 그냥 빠져나간다.
                    if (sArrData == null || sArrData.Length <= 0) return null;
    
                    //생성하려고 하는 DataTable의 Column길이가 없으면 그냥 빠져나간다.
                    //if (nColumnCount <= 0) return null;
    
                    //컬럼 개수와 컬럼헤더 개수가 같지 않으면 그냥 빠져나간다.
                    if (nColumnCount != sArrColumnHeader.Length) return null;
    
                    //1차원 배열 길이를 가지고 생성할 DataTable의 Row개수를 가져온다.
                    if ((sArrData.Length % nColumnCount) == 0)
                    {
                        nRowCount = sArrData.Length / nColumnCount;
                    }
                    else
                    {
                        nRowCount = (sArrData.Length / nColumnCount) + 1;
                    }
                    DataTable dDT = new DataTable("NewTable");       //반환할 DataTable을 생성한다.
                    DataColumn dDC;
                    DataRow dDR;
    
                    //컬럼을 생성해서 DataTable에 추가한다.
                    for (int nColumnIndex = 0; nColumnIndex < nColumnCount; nColumnIndex++)  
                    {
                        dDC = new DataColumn();
                        dDC.DataType = Type.GetType("System.String");   //Column은 String형식으로 한다.
                        dDC.ColumnName = sArrColumnHeader[nColumnIndex].ToString();    //인자로 넘어온 ColumnHeader를 지정해준다.
                        dDC.Caption = sArrColumnHeader[nColumnIndex].ToString();
                        
                        dDT.Columns.Add(dDC);        //생성된 컬럼을 DataTable에 추가한다.
                    }
    
                    //생성된 DataTable에 행 데이터를 추가한다.
                    for (int nRowIndex = 0; nRowIndex < nRowCount; nRowIndex++)       //행 데이터를 추가한다.
                    {
                        dDR = dDT.NewRow();
    
                        for (int nColumnIndex = 0; nColumnIndex < nColumnCount; nColumnIndex++)
                        {
                            if (nIndex < sArrData.Length)
                            {
                                dDR[nColumnIndex] = sArrData[nIndex];      //1차원 배열의 값을 DataRow에 추가한다.
                                nIndex = nIndex + 1;                          //배열 Index를 증가시킨다.
                            }
                        }
                        dDT.Rows.Add(dDR);           //생성한 행 데이터를 DataTable에 추가한다.
                    }
                    return dDT;
                }
                catch
                {
                    throw new Exception();
                }
            }
    
            
            public string[] funDataTableTo1Array(DataTable dtDataTable)
            {
                int nColumnCount = 0;
                int nRowCount = 0;
                int nIndex = 0;
                string[] sArrData = null;
                try
                {
                    //DataTable이 Null이거나 Data가 없으면 그냥 빠져나간다.
                    //if (dtDataTable == null || dtDataTable.Rows.Count <= 0) return null;
    
                    nColumnCount = dtDataTable.Columns.Count;    //컬럼개수를 가져온다.
                    nRowCount = dtDataTable.Rows.Count;          //Row개수를 가져온다.
    
                    //배열의 Size를 구한다.
                    sArrData = new string[nColumnCount * nRowCount];
    
                    for (int nRowIndex = 0; nRowIndex < nRowCount; nRowIndex++)      
                    {
                        for (int nColumnIndex = 0; nColumnIndex < nColumnCount; nColumnIndex++)
                        {
                            sArrData[nIndex] = dtDataTable.Rows[nRowIndex][nColumnIndex].ToString();    //1차원배열에 값을 저장한다.
                            nIndex = nIndex + 1;
                        }
                    }
                    return sArrData;
                }
                catch
                {
                    throw new Exception();
                }
            }
    반응형

    댓글

Designed by Tistory.