데이터 세트에 바인딩 된 Xceed 's Datagrid를 사용하고 있습니다. DataGrid의 RowEditEnd가 호출 될 때 데이터베이스를 업데이트하려고합니다. 문제는 업데이트 할 때 동시성 위반을 피하기 위해, 나는 다음과 같이 업데이트 후 데이터 집합을 취소하고 그것을 보충해야한다는 것입니다 : 나는 이렇게 생각그리드의 바운드 데이터 세트에서 데이터베이스를 업데이트 할 때 내 DataGrid의 선택이 손실됩니다. 해결 방법은 무엇입니까?
public void UpdateDatabaseFromDataSet()
{
adapter.Update(exampleDataSet);
exampleDataSet.Clear();
adapter.Fill(exampleDataSet);
}
을 내 데이터 세트의 기본 자동 증가 열 "ID 때문에 "데이터베이스에서 생성 된 값과 일치하지 않습니다. 데이터 집합을 지울 때 DataGrid 및 선택한 셀을 지 웁니다. 셀을 편집하고 Enter 키나 방향키를 누르면 셀과 데이터베이스가 잘 업데이트되지만 다음 행/셀로 이동하지 않고 선택 항목이 재설정되므로 매우 불편할 수 있습니다. 이것은 손으로 데이터를 입력하는 것을 매우 번거롭게 만듭니다. 나는 -1에 autoincrementseed 테이블과 autoincrementsteps 설정을 시도했지만 나는 데이터 집합을 보충하지 않으면 난 아직도 동시성 위반을 얻을
public void InitDataSet(int tableid)
{
cmd = new SQLiteCommand("SELECT * FROM table_" + tableid, con);
adapter = new SQLiteDataAdapter(cmd);
cb = new SQLiteCommandBuilder(adapter);
try
{
exampleDataSet = new DataSet();
adapter.Fill(exampleDataSet);
prodDataSet.Tables[0].Columns[0].AutoIncrementSeed = -1;
prodDataSet.Tables[0].Columns[0].AutoIncrementStep = -1;
currenttableID = tableid;
}
catch (ApplicationException ex)
{
MessageBox.Show("Encountered an error.", "Error: " + ex.ToString());
}
}
참고 : 여기에
는 데이터 세트를 생성하는 방법이다.데이터 세트를 지우지 않고 다시 채우지 않으면 데이터 그리드가 작동하는 것이 좋습니다. 어쨌든 실행중인 동시성 위반을 피할 수 있습니까? 내가 잘못된 방향으로가는거야?
도움 주셔서 감사합니다. -Steven
그래, 나는 매우 명확하지 않은 질문에 대해 사과드립니다. 그들이 내 문제를 해결할 수있는 것처럼 당신의 제안을 주셔서 대단히 감사합니다. 나는 다음 주에 집에 돌아와서 제안했던 것을 시도해보고 어떻게되었는지 알려줄 것입니다. 다시 한 번 감사드립니다. – stevosaurus
당신이 올바른 방향으로 나를 지적한 이후로 당신의 대답을 받아 들였습니다. Julian에게 많은 도움을 주셔서 감사합니다. 아래의 다른 답변에서 사용 된 실제 코드를 게시했습니다. 다시 한 번 감사드립니다! – stevosaurus