2011-12-29 3 views
2

런타임에 TDBGrid 구성 요소를 동적으로 만들 때 사용자가 셀의 값을 편집 할 수 없습니다. 모두가 제대로 작동 폼 디자이너에 dgEditing을 사용하지 않도록 설정하면TDBGrid의 편집 옵션 비활성화가 작동하지 않습니다.

TDBGrid *DbGrid = new TDBGrid(Owner); 
DbGrid->Options = DbGrid->Options >> dgEditing; 

: 이것은 내가 행동의 유형을 달성하기 위해 노력하고 방법이다. 나는이 두 가지 경우의 차이점을 발견 할 수 없다. DBGrid 셀을 편집하지 못하게하려면 어떻게해야합니까?

DbGrid-> 옵션 =의 TDBGridOptions

을 dgEditing (DbGrid-> 옵션) >>하지만 그 차이가 뭔지 모르겠어요

답변

3

비결은 다음과 같은 방법으로이 작업을 수행하는 것입니다.

0

DbGrid에서 편집을 허용할지 여부를 프로그래밍 방식으로 변경할 수 없다는 점에서 C++ Builder의 Seattle 버전과 동일한 문제가 있습니다. DbGrid-> Options 값은 TDBGridOptions() 캐스트를 요구하지 않고 변경할 수 있지만 DbGrid는 DbGrid-> Options가 설정된 값을 따르지 않습니다. dgEditing 개체 검사기에서 DbGrid가 활성화되어 있으면 DbGrid-> Options.dgEditing의 상태와 상관없이 DbGrid는 항상 편집을 허용하고 개체 검사기에서 dgEditing이 비활성화되어 있으면 DbGrid가 편집을 허용하지 않습니다. 처음에는 작동하는 것처럼 보입니다 (즉, 열의 하이라이트와 셀의 변경). DbGrid-> Options.ToInt() 및 DbGrid-> Options.Contains (dgEditing)를 사용하여이 문제를 직접 테스트하여 자신에게 걸림돌이되지 않도록합니다.

0

나는 마침내 그것을 작동시키는 방법을 발견했다.

dgEditing을 true로 설정하면 (Object Inspector의 DBGrid 옵션) 언제든지 편집 할 수 있습니다. 그런 다음 사용자가 편집 할 수 없을 때 DBGrid->ReadOnly=false을 설정하십시오.

개인을 설정하려는 행운이 없었습니다. DBGrid->Columns->Items[ii]->ReadOnly=false. 이 프로그램은 저의 행동을 저지하지 못했지만, 저의 모든 것을 무시했습니다.

최소한의 구성 요소로 특수 소형 테스트 프로그램을 작성했으며 오브젝트 검사기에서 dgEditing을 true로 설정하여 좋은 결과를 얻은 다음 사용자가 편집을 막으려 고했을 때 dgEditing을 false로 변경했습니다. 나는 내 전체 프로그램에 넣어, 무언가가 DBGrid 작동하지 못하게했다.

DBGrid->ReadOnly은 다른 사람도 사용할 수 있습니다.