반응형
개발을 하다보면
상하GridRow를 이동하는 로직이 필요할때가 있다.
상위 이동 로직
//이동시킬Row저장
List<DataRow> selectedRowsData = new List<DataRow>();
//선택된 그리드
foreach (var item in (grid.DataSource as DataTable).AsEnumerable().Where(x => (x["CHK"].SafeInt() == 1 || x["CHK"].SafeString() == "True")))
{
DataRow newRow = (grid.DataSource as DataTable).Clone().NewRow();
newRow.ItemArray = item.ItemArray;
//newRow.AcceptChanges();
selectedRowsData.Add(newRow);
}
bool isContinue = true;
for (int i = 0; i < (grid.DataSource as DataTable).Rows.Count; i++)
{
if (isContinue == false)
{
break;
}
//이동하기전Row
Dictionary<int, DataRow> selectedMoveRowsData = new Dictionary<int, DataRow>();
DataColumnCollection colums = (grid.DataSource as DataTable).Clone().Columns;
//selectedMoveRowsData[i]["WORK_SEQNO"]
//이동하기전에 Row는 한칸내리고
if (selectedRowsData.Any(x => x["PRCS_SEQNO"].SafeInt() == (grid.DataSource as DataTable).Rows[i]["PRCS_SEQNO"].SafeInt()))
{
//0보다 작을때는 패스
if (i - 1 < 0)
{
isContinue = false;
}
else
{
//이동시킬것 담고
if (selectedMoveRowsData.ContainsKey((grid.DataSource as DataTable).Rows[i]["PRCS_SEQNO"].SafeInt()) == false)
{
//(GRV_T2_D.DataSource as DataTable).Rows[i].ItemArray;
DataRow newRow = (grid.DataSource as DataTable).Clone().NewRow();
newRow.ItemArray = (grid.DataSource as DataTable).Rows[i - 1].ItemArray;
selectedMoveRowsData.Add((grid.DataSource as DataTable).Rows[i - 1]["PRCS_SEQNO"].SafeInt(), newRow);
//저장된 Row이동
for (int j = 0; j < colums.Count; j++)
{
//if (colums[j].ColumnName == "WORK_SEQNO_DP")
//{
//}
//else
{
(grid.DataSource as DataTable).Rows[i - 1][colums[j].ColumnName] = (grid.DataSource as DataTable).Rows[i][colums[j].ColumnName];
if (selectedMoveRowsData.Count == 1)
{
//마킹
(grid.DataSource as DataTable).Rows[i][colums[j].ColumnName] = selectedMoveRowsData.FirstOrDefault().Value[colums[j].ColumnName];//[(GRD_T2_D.DataSource as DataTable).Rows[i]["WORK_SEQNO"].SafeInt() - 1]
}
}
}
}
}
}
}
하위 이동 로직
//이동시킬Row저장
List<DataRow> selectedRowsData = new List<DataRow>();
foreach (var item in (grid.DataSource as DataTable).AsEnumerable().Where(x => (x["CHK"].SafeInt() == 1 || x["CHK"].SafeString() == "True")))
{
DataRow newRow = (grid.DataSource as DataTable).Clone().NewRow();
newRow.ItemArray = item.ItemArray;
//newRow.AcceptChanges();
selectedRowsData.Add(newRow);
}
bool isContinue = true;
//for (int i = 0; i < (GRD_T2_D.DataSource as DataTable).Rows.Count; i++)
for (int i = (grid.DataSource as DataTable).Rows.Count - 1; i >= 0; i--)
{
if (isContinue == false)
{
break;
}
//이동하기전Row
Dictionary<int, DataRow> selectedMoveRowsData = new Dictionary<int, DataRow>();
DataColumnCollection colums = (grid.DataSource as DataTable).Clone().Columns;
//이동하기전에 Row는 한칸내리고
if (selectedRowsData.Any(x => x["PRCS_SEQNO"].SafeInt() == (grid.DataSource as DataTable).Rows[i]["PRCS_SEQNO"].SafeInt()))
{
//Row보다 클때는 패스
if (i + 1 >= (grid.DataSource as DataTable).Rows.Count)
{
isContinue = false;
}
else
{
//이동시킬것 담고
if (selectedMoveRowsData.ContainsKey((grid.DataSource as DataTable).Rows[i]["PRCS_SEQNO"].SafeInt()) == false)
{
//(GRV_T2_D.DataSource as DataTable).Rows[i].ItemArray;
DataRow newRow = (grid.DataSource as DataTable).Clone().NewRow();
newRow.ItemArray = (grid.DataSource as DataTable).Rows[i + 1].ItemArray;
selectedMoveRowsData.Add((grid.DataSource as DataTable).Rows[i + 1]["PRCS_SEQNO"].SafeInt(), newRow);
//저장된 Row이동
for (int j = 0; j < colums.Count; j++)
{
//if (colums[j].ColumnName == "WORK_SEQNO_DP")
//{
//}
//else
{
(grid.DataSource as DataTable).Rows[i + 1][colums[j].ColumnName] = (grid.DataSource as DataTable).Rows[i][colums[j].ColumnName];
if (selectedMoveRowsData.Count == 1)
{
//마킹
(grid.DataSource as DataTable).Rows[i][colums[j].ColumnName] = selectedMoveRowsData.FirstOrDefault().Value[colums[j].ColumnName];//[(GRD_T2_D.DataSource as DataTable).Rows[i]["WORK_SEQNO"].SafeInt() - 1]
}
}
(grid.DataSource as DataTable).AcceptChanges();
}
}
}
}
}
'Development Programs' 카테고리의 다른 글
c#으로 작성된 코드를 네이티브 빌드 해보자 (2) | 2024.06.19 |
---|---|
scoped_dir 폴더 삭제 프로그램 (33) | 2024.05.10 |
c# 엑셀 버전 찾기 (0) | 2022.11.18 |
소켓 상태, 소켓 연결, 소켓 상태 체크 , 소켓 감시 체크 프로그램 (0) | 2014.07.16 |
CopyAssist 0.1 - 클립보드를 커스텀하게 변환하는 유틸, 복사 유틸 (1) | 2012.02.20 |