[C#] Visual Studio 디자이너가 DataGridView에서 열을 자동으로 생성하지 않도록하려면 어떻게해야합니까?


Answers

ComboBox의 Items 속성을 사용하기 전에이 동작을 보았고 정말 실망 스럽습니다. 다음은 ComboBox로 어떻게 처리했는지 보여줍니다. 이 값을 DataGridView에 적용 할 수 있어야합니다.

Items라는 "새로운"속성을 만들었고 브라우징 할 수 없도록하고 직렬화에서 명시 적으로 숨겨 지도록 설정했습니다. 후드에서 실제 Items 속성에 액세스합니다.

[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new ObjectCollection Items
{
    get { return ((ComboBox)this).Items; }
}

[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new object DataSource
{
    get { return ((ComboBox)this).DataSource; }
Question

프로그래밍 방식으로 서브 클래 싱 된 DataGridView 에서 모든 내 열을 생성합니다. 그러나 Visual Studio 2008은 내 생성자 클래스 ( DataTable 에 빈 콘텐츠를 채우고 DataGridView 바인딩)를 읽은 다음 InitializeComponent 메서드의 열에 대한 코드를 생성합니다.이 프로세스의 설정은 AutoGenerateColumnsfalse 설정합니다.

이로 인해 디자인 타임 컴파일에서 오류가 발생합니다.이 오류는 디자인 코드로 직접 들어가서 자동 생성 된 열에 대한 모든 참조를 삭제하면 해결됩니다.

어떻게하면 멈출 수 있습니까?

나는 시도했다 :

  • 컨트롤 '냉동'만들기
  • DataGridView 인스턴스화 된 객체를 protected 설정 ( 이 사이트에서 언급 한 이전 게시물에서 제안)



나는 이것과 비슷한 문제에 부딪 혔고, 나의 질문을 적었을 때부터 여기에 내 해결책을 게시하고있다. 이것이 최고의 제안 된 질문이었다. 필자는 코드를 컴파일 할 때마다 디자이너가 데이터 소스의 각 열을 자동으로 추가합니다 (다음에 코드를 작성하면 실행중인 응용 프로그램에 나타납니다). 자동 생성 열은 false로 설정되어 있음에도 불구하고 말입니다.

결국에는 자동 생성 된 열과 동일한 이름을 내 열 중 하나에 제공하여 데이터를 중지 할 수있었습니다 (데이터 원본을 사용할 수있게되기 전에 원래 내 열이 수동으로 만들어 졌음).




내 사용자 지정 컨트롤에서이 작업을 자주 수행합니다. 디자이너에서 DesignMode 검사로 실행하고 싶지 않은 코드를 래핑하면 문제가 해결됩니다.

    if (!DesignMode)
    {
        // Your code here
    }



@ JaredPar의 대답 은이 문제를 해결하는 가장 좋은 방법을 찾았지만 DataGridView 하위 클래스가 포함 된 컨트롤은 디자이너의 모든 것이 변경 될 때마다 열을 추가합니다.

시각적 디자이너에서 볼 수 있도록 생성자의 열을 유지하고 싶었 기 때문에 하위 클래스가 기본에서 상속 한 표준 DataGridViewDesigner 를 사용하지 않도록 설정해야했습니다. 내 클래스의 Designer 특성을 변경했습니다 ...

using System.Windows.Forms.Design;

[Designer(typeof(ControlDesigner))]
public class SpecificDataGridView : DataGridView
{
    [Browsable(false),
     DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public new DataGridViewColumnCollection Columns
    {
        get { return base.Columns; }
    }

    ...etc...
}

디자이너가 DataGridViewDesigner 작업에서 '항목 편집'등을 사용할 수 없으며 원하는대로 열 속성을 조정할 수 없지만 필요에 따라 그리 유용하지는 않습니다. 손실 없음.

어쨌든, 문제가 해결되었고 여전히 열이 디자이너에서 볼 수 있다는 것이 내 기본 목표였습니다.

그냥 내가 나누겠다고 생각 했어.




열이 자동으로 생성되도록 디자이너에서 양식을 다시 연 다음 DataGridView를 클릭하고 열 편집을 선택한 다음 문제가있는 각 열을 통과하고 '표시'속성을 False로 설정합니다. 양식을 저장하고 닫거나 다시 열어 더 이상 발생하지 않도록하십시오. 이것은 실제로 저에게 효과가있는 유일한 비 코딩 솔루션이었으며, winforms 디자이너 문제를 해결하는 코드를 추가하고 싶지 않았습니다.