DataTable 소스에 연결된 DataGridView가 있습니다. 테이블에있는 요소에 대한 데이터 중에는 내가 숨기고 싶은 Guid가 있습니다. 다음과 같이 (. 그것은 참조를 위해 내부적으로 사용,하지만 표시되지 않아야) 내가 테이블을 만드는 데 사용하고 코드는 다음과 같습니다DataGridView 숨겨진 열이 숨겨져 있지 않습니다.
private DataTable mEntities = new DataTable();
private System.Windows.Forms.DataGridView EntitiesGridView;
이 그냥 참조 여기를 보여주는, 다른 곳에서 선언됩니다.
private void BuildEntityTable()
{
mEntityTable.Columns.Add("id", typeof(Guid));
mEntityTable.Columns.Add("Name", typeof(string));
... (some other columns)
foreach (Foo foo in mEntities)
{
DataRow row = mEntityTable.NewRow();
row["id"] = foo.id;
row["Name"] = foo.Name;
... (rest of data)
mEntityTable.Rows.Add(row);
}
DataColumn[] entityKeys = new DataColumn[1];
entityKeys[0] = entityTable.Columns["id"];
mEntityTable.PrimaryKey = entityKeys;
EntitiesGridView.DataSource = mEntityTable.DefaultView;
EntitiesGridView.Columns["id"].visible = false;
}
지금까지 그렇게 좋았습니다. 테이블이 만들어지고 눈에 보이는 "id"열이 없습니다. 그러나 나중에 테이블에 새 개체를 추가하면 문제가 발생합니다. 코드는 거의 동일합니다.
"id"열이 다시 나타납니다. 이전 코드에서 EntitiesGridView.Columns["id"].visible = false;
행을 복사하려고 시도했지만 좋지 않습니다. 이 시점 이후로해야 할 일은 그 칼럼을 사라지게 할 것입니다. 내가 누락 된 단서가 있습니까?
왜 mEntities와 mEntityTable을 모두 갖고 있습니까? 당신처럼 DataGridview에 바인딩 된 데이터 테이블을 만들었을 때 새로운 행을 추가해도 문제가 재현되지 않았습니다. 숨겨진 열은 숨겨져있었습니다. 오류를 재생산하는 최소한의 예를 제공 할 수도 있습니다. 실제로 직접 문제를 찾을 수도 있습니다. 또한 AddNewObject는 어디에서 호출됩니까? 나는 그것이 다른 스레드에서 잠금 따라서 추측인가? 문제에 기여하는 의심은 있지만 당신이 보여준 것보다 조금 더 진행될 것으로 보인다. –
DataTable은 PropertyGrid를 채우는 데 사용됩니다. DataGridView는 DataTable의 몇 가지 키 값만 표시하며 PropertyGrid는 모두 표시합니다. (어떤 경우에는 수십 가지가 있습니다.) 일을 혼란스럽게 할 수도 있기 때문에 게시하지 않은 경우가 더 많습니다. 여기에있는 "Foo"는 런타임에 멋진 PropertyDescriptor 항목으로 동적으로 생성되는 사용자 정의 클래스입니다. AddNewObject는 네트워크를 통해 데이터를 수신하는 XML 파서에 의해 호출되어 새로운 개체를 즉석에서 만듭니다. 나는 이것들 중 어떤 것이 내가 가지고있는 문제와 관련이 있는지 의심 스럽다. 그리고 나는 그것을 모두 게시한다면 너무 많은 코드가 될 것이다. –
공정한 호출, 여분의 일이 영향을 미치지 않는 것처럼 들립니다. 앞에서 말했듯이 단추 이벤트 핸들러 내의 데이터 테이블에 추가하는 간단한 예제는 문제를 재현하지 않습니다. 내가 생각할 수있는 것은이 포럼 스레드에서 논의 된 문제입니다. http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/19841219-f1fc-454b-a019-097529a211e1/ –