문제

나는 많은 곳을 보았고 이 간단한 일을 하기 위해 고군분투하고 있습니다.다음 형식으로 간단한 DataGridView를 표시하는 Windows 형식이 있습니다.

| (checkboxColumn) | FilePath | filestate |

이제 몇 가지 문제가 있습니다.바인딩해야 하는 데이터는 다음과 같은 개체 목록에 있습니다.

    class FileObject
    {
        string filePath;
        string fileState;
    }

    //Now here's the list of these objects which I populate somehow. 
    List<FileObject> listFiles;
  • 목록에있는 다른 객체 멤버가 다른 열에 바인딩되고 각 체크 박스가있는 경우 DatagridView에 직접 바인딩하는 효율적인 방법이 있습니까?
  • DataGrid에 확인란 열을 추가하는 예제를 보았지만 '헤더'행에 추가하는 방법을 보여주지 않았으므로 'All Check'/'All All Check'상자로 작동 할 수 있습니다.

이를 달성하는 방법에 대한 도움이 될 것입니다!저는 C#으로 간단한 애플리케이션을 작성하지만 데이터 그리드 등을 사용하여 작업할 필요는 없었습니다.:(

감사해요!

도움이 되었습니까?

해결책

DataGridView 컨트롤에는 AutoGenerateColumns 속성으로 설정할 수 있는 열을 자동으로 생성하는 기능이 있습니다.이 속성의 기본값은 true입니다. 즉, 열은 기본적으로 자동 생성됩니다.

그러나 열은 그리드에 바인딩한 개체의 공용 속성에 대해서만 자동으로 생성되며 필드는 표시되지 않습니다.

바인딩된 개체에 공용 부울 속성이 있는 경우 확인란 열에도 자동 생성이 작동합니다.

따라서 처음 두 가지 요구 사항을 달성하는 가장 간단한 방법은 FileObject 이것에 대한 수업 :

public class FileObject
{
    public string FilePath { get; set; }
    public string FileState { get; set; }
    public bool Selected { get; set; }
}

해당 클래스를 수정할 수 없는 경우 다음으로 가장 좋은 방법은 파일 개체를 보유하는 래퍼 개체를 만드는 것입니다.

public class FileObjectWrapper
{
    private FileObject fileObject_;

    FileObjectWrapper()
    {
        fileObject_ = new FileObject();
    }

    FileObjectWrapper(FileObject fo)
    {
        fileObject_ = fo;
    }

    public string FilePath
    {
        get { return fileObject_.filePath; }
        set { fileObject_.filePath = value; }
    }

    public string FileState
    {
        get { return fileObject_.fileState; }
        set { fileObject_.fileState= value; }
    }

    public bool Selected { get; set; }
}

그런 다음 다음과 같이 바인딩할 목록을 만들 수 있습니다(BindingList가 일반적으로 가장 좋음).

var fowList = new BindingList<FileObjectWrapper>();

foreach (FileObject fo in // here you have your list of file objects! )
{
    fowList.Add(new FileObjectWrapper(fo));
}

dataGridView1.DataSource = fowList;    

위의 작업을 수행하는 방법에는 여러 가지가 있지만 이것이 일반적인 아이디어입니다.


언바운드를 추가할 수도 있습니다. DataGridViewCheckBoxColumn 하지만 바인딩 목록에 있는 것이 더 쉽다는 것을 알았습니다.필요한 경우 방법은 다음과 같습니다.

DataGridViewCheckBoxColumn c = new DataGridViewCheckBoxColumn();
c.Name = "Selected";
dataGridView1.Columns.Add(c);

마지막으로 헤더에 "SelectedAll" 옵션을 포함하려면 사용자 정의 코드를 사용해야 합니다.

Umesh가 링크한 CodeProject에 대한 기사(DataGridView의 CheckBox 헤더 열) 구현하기가 매우 쉬워 보입니다. 사용자 정의를 만듭니다. DataGridViewHeaderCell 재정의 Paint 그리고 OnMouseClick 행동 양식.

다른 팁

아래의 예를 참조하여 를 찾고있는 것을 정확하게 보여주십시오.

http://www.codeproject.com/articles/20165 / 체크 박스 - 헤더 - 열 - DataGridView

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top