2012-04-25 4 views
1

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; 행을 복사하려고 시도했지만 좋지 않습니다. 이 시점 이후로해야 할 일은 그 칼럼을 사라지게 할 것입니다. 내가 누락 된 단서가 있습니까?

+0

왜 mEntities와 mEntityTable을 모두 갖고 있습니까? 당신처럼 DataGridview에 바인딩 된 데이터 테이블을 만들었을 때 새로운 행을 추가해도 문제가 재현되지 않았습니다. 숨겨진 열은 숨겨져있었습니다. 오류를 재생산하는 최소한의 예를 제공 할 수도 있습니다. 실제로 직접 문제를 찾을 수도 있습니다. 또한 AddNewObject는 어디에서 호출됩니까? 나는 그것이 다른 스레드에서 잠금 따라서 추측인가? 문제에 기여하는 의심은 있지만 당신이 보여준 것보다 조금 더 진행될 것으로 보인다. –

+0

DataTable은 PropertyGrid를 채우는 데 사용됩니다. DataGridView는 DataTable의 몇 가지 키 값만 표시하며 PropertyGrid는 모두 표시합니다. (어떤 경우에는 수십 가지가 있습니다.) 일을 혼란스럽게 할 수도 있기 때문에 게시하지 않은 경우가 더 많습니다. 여기에있는 "Foo"는 런타임에 멋진 PropertyDescriptor 항목으로 동적으로 생성되는 사용자 정의 클래스입니다. AddNewObject는 네트워크를 통해 데이터를 수신하는 XML 파서에 의해 호출되어 새로운 개체를 즉석에서 만듭니다. 나는 이것들 중 어떤 것이 내가 가지고있는 문제와 관련이 있는지 의심 스럽다. 그리고 나는 그것을 모두 게시한다면 너무 많은 코드가 될 것이다. –

+0

공정한 호출, 여분의 일이 영향을 미치지 않는 것처럼 들립니다. 앞에서 말했듯이 단추 이벤트 핸들러 내의 데이터 테이블에 추가하는 간단한 예제는 문제를 재현하지 않습니다. 내가 생각할 수있는 것은이 포럼 스레드에서 논의 된 문제입니다. http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/19841219-f1fc-454b-a019-097529a211e1/ –

답변

1

이 당신의 Form_Load()이 라인을

datagridview1.Columns[0].visible = false; 
+0

내 코드를 확인하십시오. (두 번째 블록의 마지막 줄). 그것은 사라지지만, 다시 설명 할 수없는 이유로 되돌아옵니다. –

0

호출이 이벤트를 쓰기

private void dgv_DataBindingComplete(Object sender, DataGridViewBindingCompleteEventArgs e) 
    { 
     DataGridView dgv = (DataGridView)sender; 
     dgv.Columns[3].Visible = false; 
    } 
+0

감사합니다.하지만 불행히도 제가 요청한 이래로 1 년이 넘었습니다.이 방법이 효과가 있는지 알 수있는 방법이 없습니다. 프로젝트가 오래 끝났으며,이 부분이 완전히 리팩터링되었습니다. 나는 코드에 더 이상 액세스 할 수 없다 ... –

0

나는이 문제가 발생하지만, 당신이 할 수있는 것으로 나타났습니다 디자인 타임에 당신의 DataGridView에 변화와 그런 다음 프로젝트를 저장하십시오. 응용 프로그램을 실행 한 다음 응용 프로그램에서 종료하십시오. 디자인 양식의 dgv가 자동으로 화면을 변경했습니다. 양식을 닫았다가 다시 열면 원래 포함/제외 된 열이 반환됩니다. 이 수정 프로그램에는 추가 코드가 필요하지 않습니다.

+0

죄송합니다. 그러나 이것은 어떤 식 으로든이 질문에 대한 대답이 아닙니다. DGV는 런타임에 필요에 따라 채워집니다. 런타임시 숨겨진 열이 나타납니다. 응용 프로그램을 시작할 때 표시되지 않지만 개체를 ​​변경하면 해당 응용 프로그램이 표시됩니다. 나는 최종 사용자가 소스 코드와 폼 디자이너에 액세스 할 수 있다고 기대할 수 없으며 어쨌든 도움이되지 않습니다. (또한이 프로젝트는 1 년 반 전에 끝났으며 더 이상 일하지 않습니다.) –

관련 문제