반응형
취미로 만드는 키움증권 OpenAPI로 C# 주식자동검색 프로그램에서 사용하는 코드인데 다른 분들께도 유용할 것 같아서 공유 드립니다.
컨셉은 간단합니다.
데이터 테이블, 데이터 그리드뷰의 셀 내용들을 약간 어색하지만 텍스트 문자열 (string)으로 변환해주는 코드입니다.
예를 들어 보여드리면~
이런 데이터그리드뷰 (데이터 소스로 데이터 테이블을 맵핑했음)를
이렇게 텍스트로 바꿔주는 메소드입니다.
아래 코드 그대로 뚝 떠다가 쓰시면 됩니다.
#region DataTable을 String으로 변환
public static string DataTable2String(DataTable dataTable)
{
StringBuilder sb = new StringBuilder();
if (dataTable != null)
{
string seperator = " | ";
#region get min length for columns
System.Collections.Hashtable hash = new System.Collections.Hashtable();
foreach (DataColumn col in dataTable.Columns)
hash[col.ColumnName] = col.ColumnName.Length;
foreach (DataRow row in dataTable.Rows)
{
if (row[0] != DBNull.Value)
{
for (int i = 0; i < row.ItemArray.Length; i++)
if (row[i] != DBNull.Value)
if (((string)row[i]).Length > (int)hash[dataTable.Columns[i].ColumnName])
hash[dataTable.Columns[i].ColumnName] = ((string)row[i]).Length;
}
}
int rowLength = (hash.Values.Count + 1) * seperator.Length;
foreach (object o in hash.Values)
rowLength += (int)o;
#endregion get min length for columns
sb.Append(new string('=', 10));
if (!string.IsNullOrEmpty(dataTable.TableName))
sb.Append(String.Format(" {0} ", dataTable.TableName));
else
sb.Append(" DataTable ");
sb.AppendLine(new string('=', 10));
#region write values
foreach (DataColumn col in dataTable.Columns)
sb.Append(seperator + String.Format("{0,-" + hash[col.ColumnName] + "}", col.ColumnName));
sb.AppendLine(seperator);
sb.AppendLine(new string('-', 22 + dataTable.TableName.Length));
foreach (DataRow row in dataTable.Rows)
{
if (row[0] != DBNull.Value)
{
for (int i = 0; i < row.ItemArray.Length; i++)
{
object cellVal = row[i].ToString();
if (cellVal.ToString() == "")
{
for (int j = 0; j < int.Parse(hash[dataTable.Columns[i].ColumnName].ToString()); j++)
{
cellVal += "~ ";
}
}
sb.Append(seperator + String.Format("{0," + hash[dataTable.Columns[i].ColumnName] + "}", cellVal));
if (i == row.ItemArray.Length - 1)
sb.AppendLine(seperator);
}
}
}
#endregion write values
sb.AppendLine(new string('=', 22 + dataTable.TableName.Length));
}
else
sb.AppendLine("===== DataTable is NULL =====");
return sb.ToString();
}
#endregion
반응형
'알고 있으면 유용한 것들' 카테고리의 다른 글
게임 안할거면 갤럭시 A32, A42를 사는게 S20, S21사는것 보다 나은 이유 (0) | 2021.08.19 |
---|---|
(게임을 안한다면..) 갤럭시 A32와 SK세븐모바일 알뜰폰으로 통신비 아끼기 (0) | 2021.08.19 |
알콜 손소독제, 비누가 코로나 바이러스, 세균을 죽이는 원리 (0) | 2021.08.18 |
렌터카 장기렌트 후 반납시 자차면책제도 이용하기 (Feat.전연령렌터카 눈탱이 조심) (2) | 2021.08.18 |
대한항공 스카이팀 마일리지 12만으로 갈수있는 곳을 알아보자. (0) | 2021.08.18 |