IT Story/C# & WPF

.NET 1-Dimensional Array <-> Example Source of Transformation Between DataTable

Hoyami7 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();
            }
        }
반응형