MySQL 데이터 Update 를 하면서 화면 갱신 문제처리에 부딪쳤다. 현재 작업하는 화면을 거의 유지하면서 MySQL 데이터 Update 를 해야 한다.
데이터 업데이트후 MySQL 다시 조회(Select) 루틴으로 하면 매번 화면의 current cell 상태를 잃어버린다. 이러다보니 너무 번거롭고 귀찮다.
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
string uid = row.Cells[2].Value.ToString();
MessageBox.Show("index :" + row.Index.ToString() + " uid : " + uid);
dataGridView1.Rows.RemoveAt(row.Index); // 셀 삭제
}
선택된 행만 셀삭제 처리를 해보니까 선택된 행은 모두 삭제되고 마지막 셀 바로 이전셀이 자동으로 현재의 셀로 선택된다.
int columnIndex = dataGridView1.CurrentCell.ColumnIndex;
int rowIndex = dataGridView1.CurrentCell.RowIndex;
CurrentCell 의 값을 가지고 작업해보면 항상 마지막에 선택된 셀의 값만 반환한다.
따라서 이건 원하는 결과를 만들어주지 못해서 패스.
FullRowSelect 로 하다보니 화면에서 보기가 별로 안좋다.
그래서 CellSelect 방식으로 테스트를 해봤다.
foreach (DataGridViewCell row in dataGridView1.SelectedCells)
{
string uid = dataGridView1.Rows[row.RowIndex].Cells[2].Value.ToString();
MessageBox.Show("index :" + row.RowIndex.ToString()+ " uid : " + uid);
dataGridView1.Rows.RemoveAt(row.RowIndex); // 셀 삭제
}
셀 단위이지만 선택된 셀의 RowIndex 를 구하면 원하는 행의 값을 얻어낼 수가 있다.
셀 단위로 선택하면 오류를 범하기 쉬운 문제를 방지하기 위해서 특정한 칼럼만 선택될 때 동작하도록 if 문을 추가했다.
foreach (DataGridViewCell row in dataGridView1.SelectedCells)
{
if (row.ColumnIndex == 3)
{
string uid = dataGridView1.Rows[row.RowIndex].Cells[2].Value.ToString();
dataGridView1.Rows.RemoveAt(row.RowIndex); // 셀 삭제
}
}
테스트를 해보고 나서 MySQL DB와 연결해서 작업을 했더니 완벽하게 원하는 결과가 나온다.
private void CheckedData(DataGridView dgv, int checkingcode)
{
myConn = new MySqlConnection(GetConnectionString());
if (myConn.State == ConnectionState.Closed)
{
myConn.Open();
}
try
{
foreach (DataGridViewCell row in dgv.SelectedCells)
{
if (row.ColumnIndex == 3)
{
string uid = dgv.Rows[row.RowIndex].Cells["uid"].Value.ToString();
string content = dgv.Rows[row.RowIndex].Cells["content"].Value.ToString();
if (content == null || content.Equals("")) { continue; }
string strqry = string.Format("UPDATE data SET checkingcode={0}, content='{1}' Where uid ={2}", checkingcode, content.Trim(), uid);
MySqlCommand cmd = new MySqlCommand(strqry, myConn);
cmd.ExecuteNonQuery();
cmd.Dispose();
dgv.Rows.RemoveAt(row.RowIndex); // 셀 삭제
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (myConn.State == ConnectionState.Open)
{
myConn.Close();
}
}
}
'C# > dataGridView' 카테고리의 다른 글
C# Context Menu 칼럼에 따라 선택적으로 보이게 처리 (0) | 2016.02.03 |
---|---|
C# dataGridView cell 툴팁(Tooltip) (0) | 2016.01.29 |
C# dataGridView 글자 크기 지정 방법 (0) | 2015.12.28 |
C# dataGridView 에 엑셀 읽어들이기 (엑셀 헤더 검사) (0) | 2015.12.06 |
C# datagGridView CSV 파일로 내보내기 (0) | 2015.12.05 |