>source

사용자가 드롭다운에서 열 이름을 선택할 수 있도록 콤보를 바인딩하고 SelectedValue에서 열 인덱스를 검색하는 동안 콤보가 지정된 DisplayMember 및 ValueMember를 무시하고 대신 ToString을 사용하는 것으로 나타났습니다. ()

복제:

  • 기본 이름을 그대로 두고 양식에 새 DataGridView 및 ComboBox 배치
  • 사용자 Form1 위에 다음 code를 삽입합니다.


public Form1()
{
    InitializeComponent();
    var dt= new DataTable();
    dt.Columns.Add("A");
    dt.Columns.Add("B");
    dataGridView1.DataSource= dt;
    comboBox1.DisplayMember= nameof(DataGridViewColumn.Name);
    comboBox1.ValueMember= nameof(DataGridViewColumn.Index);
    comboBox1.DataSource= dataGridView1.Columns;
}

  • 앱을 실행합니다. 콤보에 두 개의 항목이 표시되지만 표시되지 않습니다.이름"A" 및 "B" -대신문자열():

valuemember를 설정한 후 중지된 디버거 이미지 -삽입하세요.


바인드를 시도하는 DataGridViewColumn 클래스와 관련된 문제인 것 같습니다. 열 컬렉션이 동일한 소품 이름을 가진 익명 유형으로 프로젝션되면 문제 없이 작동합니다.

comboBox1.DataSource= dataGridView1.Columns.Cast<DataGridViewColumn>().Select(c=> new { c.Name, c.ColumnIndex }).ToList();

다른 것과 마찬가지로 public이라는 이름의 props가 있는 클래스인 DataGridViewColumn이 이 바인딩 시나리오에서 직접 작동하지 않는 이유가 궁금합니다.

  • 이전 javascript : 브라우저에서 txt 파일을 직접 인쇄할 수 있습니까?
  • 다음 bash : Jenkins 작업에서 Linux 명령 실행