ModelLinkControl modelLinkControl = new ModelLinkControl();
modelLinkControl.bindingSourceCModels.DataSource = cModels;
modelLinkControl.bindingSourceAModels.DataSource = aModels;
modelLinkControl.bindingSourceModelLinks.DataSource = modelLinks;
modelLinks는 List<MyClass>
이고 3 개의 속성이 있습니다. ID, aID 및 cID. aID 및 cID는 해당 DataGridColum
의 DataPropertyName에 사용됩니다. aModels 및 cModels은 두 개의 속성을 포함하는 List<AnotherClass>
입니다. ID 및 이름은 해당 ComboBox
에 ValueMember = "ID"
및 DisplayMember = "Name"
에 사용합니다.DataGridViewComboBox 및 ValueMember를 사용하려고하면 System.ArgumentException이 발생합니다.
위의 스 니펫의 마지막 줄에 있습니다.
System.ArgumentException occurred
Message=Field called ID does not exist.
Source=System.Windows.Forms
StackTrace:
at System.Windows.Forms.DataGridViewComboBoxCell.InitializeValueMemberPropertyDescriptor(String valueMember)
at System.Windows.Forms.DataGridViewComboBoxCell.OnDataGridViewChanged()
at System.Windows.Forms.DataGridViewRowCollection.AddInternal(DataGridViewRow dataGridViewRow)
at System.Windows.Forms.DataGridView.RefreshRows(Boolean scrollIntoView)
at System.Windows.Forms.DataGridView.RefreshColumnsAndRows()
at System.Windows.Forms.DataGridView.DataGridViewDataConnection.ProcessListChanged(ListChangedEventArgs e)
at System.Windows.Forms.DataGridView.DataGridViewDataConnection.currencyManager_ListChanged(Object sender, ListChangedEventArgs e)
at System.Windows.Forms.CurrencyManager.OnListChanged(ListChangedEventArgs e)
at System.Windows.Forms.CurrencyManager.List_ListChanged(Object sender, ListChangedEventArgs e)
at System.Windows.Forms.BindingSource.OnListChanged(ListChangedEventArgs e)
at System.Windows.Forms.BindingSource.ResetBindings(Boolean metadataChanged)
at System.Windows.Forms.BindingSource.SetList(IList list, Boolean metaDataChanged, Boolean applySortAndFilter)
at System.Windows.Forms.BindingSource.ResetList()
at System.Windows.Forms.BindingSource.set_DataSource(Object value)
InnerException:
모든 입력란, 클래스 및 속성의 철자를 검사했습니다. 디자이너의 모든 열을 제거하고 다시 추가하여 모든 철자를주의 깊게 확인했습니다. modelLinks의 ID가 aModels 및 cModels에 존재합니다. 또한 3 개의 목록 모두에서 List<>
에서 BindingList<>
으로 변경해 보았습니다. 그리고 난 그냥 같은 오류가 계속.
ValueMember = "ID"
을 제거하면 AnotherClass
이 Guid
와 일치하지 않으므로 다른 오류가 발생합니다. 나는 다음 시도 모르는
은 ...
디자이너가 생성 :
//
// dataGridViewModels
//
this.dataGridViewModels.AllowUserToAddRows = false;
this.dataGridViewModels.AllowUserToDeleteRows = false;
this.dataGridViewModels.AutoGenerateColumns = false;
this.dataGridViewModels.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
this.dataGridViewModels.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
this.dataGridViewModels.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridViewModels.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.ColumnC,
this.ColumnA});
this.dataGridViewModels.DataSource = this.bindingSourceModelLinks;
this.dataGridViewModels.Dock = System.Windows.Forms.DockStyle.Fill;
this.dataGridViewModels.Location = new System.Drawing.Point(0, 0);
this.dataGridViewModels.Name = "dataGridViewModels";
this.dataGridViewModels.RowHeadersVisible = false;
this.dataGridViewModels.Size = new System.Drawing.Size(794, 445);
this.dataGridViewModels.TabIndex = 0;
//
// ColumnC
//
this.ColumnC.DataPropertyName = "cID";
this.ColumnC.DataSource = this.bindingSourceCModels;
this.ColumnC.HeaderText = "cModel";
this.ColumnC.Name = "ColumnC";
this.ColumnC.DisplayMember = "Name";
this.ColumnC.ValueMember = "ID";
//
// ColumnA
//
this.ColumnA.DataPropertyName = "aID";
this.ColumnA.DataSource = this.bindingSourceAModels;
this.ColumnA.HeaderText = "aModel";
this.ColumnA.Name = "ColumnA";
this.ColumnA.DisplayMember = "Name";
this.ColumnA.ValueMember = "ID";
그냥 BrowsableAttribute (false)를 직접 실행했습니다. 좋은 캐치. – jcox