我一直收到一条说明DataGridViewComboBox value is not valid
的错误。看起来它也是无限循环:我会点击确定,它会不断弹出。我正在运行一个程序,其中包含用C#和.NET编写的Windows窗体应用程序。有谁知道如何解决这个错误?
以下是我的代码的一些部分:
// authorityTypeDataGridViewTextBoxColumn
//
this.authorityTypeDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;
this.authorityTypeDataGridViewTextBoxColumn.DataPropertyName = "AuthorityType";
this.authorityTypeDataGridViewTextBoxColumn.DataSource = this.AuthorityTypeBindingSource;
this.authorityTypeDataGridViewTextBoxColumn.DisplayMember = "Description";
this.authorityTypeDataGridViewTextBoxColumn.DisplayStyle = System.Windows.Forms.DataGridViewComboBoxDisplayStyle.ComboBox;
this.authorityTypeDataGridViewTextBoxColumn.Frozen = true;
this.authorityTypeDataGridViewTextBoxColumn.HeaderText = "AuthorityType";
this.authorityTypeDataGridViewTextBoxColumn.MaxDropDownItems = 100;
this.authorityTypeDataGridViewTextBoxColumn.Name = "authorityTypeDataGridViewTextBoxColumn";
this.authorityTypeDataGridViewTextBoxColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.authorityTypeDataGridViewTextBoxColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
this.authorityTypeDataGridViewTextBoxColumn.ValueMember = "Value";
this.authorityTypeDataGridViewTextBoxColumn.Width = 121;
//
// AuthorityTypeBindingSource
//
this.AuthorityTypeBindingSource.DataMember = "AuthorityType";
this.AuthorityTypeBindingSource.DataSource = this.lookUpDataSet;
有人有任何建议吗?
以下是处理程序:
private void TaskSummaryGrid_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
MessageBox.Show(this, e.Exception.Message);
e.Cancel = true;
}
答案 0 :(得分:2)
是的,解决方案是使datagridviewcombobox单元格值与后面的代码相同。
如果我想显示typeof(int)值,我必须设置datagridviewcombobox单元格的属性,如:
this.ComboboxCellcolumnName.ValueType = typeof(int);
你得到的值类型(例如int)应该与你想要在组合单元格中显示的相同(int)。
答案 1 :(得分:0)
看起来你的DataGridViewTextBoxColumn在某个时候是一个DataGridViewComboBoxColumn,因为你有不属于TextBox列的ComboBox属性。
DataGridViewTextBoxColumn 不:
.DataSource = this.AuthorityTypeBindingSource;
.DisplayMember = "Description";
.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
.MaxDropDownItems = 100;
.ValueMember = "Value";
我只能猜测手动编辑设计器文件会导致这种情况。
答案 2 :(得分:0)
但是,如果您想恢复到组合框列,则需要设置一些特殊处理来设置它。
您可以参考此处的MSDN文章或以下示例:
MSDN: Binding Enums to DataGridViews
InitializeComponent();
// special setup for enum column
DataGridViewComboBoxColumn stateColumn = dgLedger.Columns[0] as DataGridViewComboBoxColumn;
if (stateColumn != null)
{
stateColumn.DataSource = Enum.GetValues(typeof(TransactionState));
}
_ledger = new BindingList<LedgerItem>();
dgLedger.DataSource = _ledger;
答案 3 :(得分:0)
我对我的一个datagridviews有过类似的体验:DataError被不停地抛出......最终结果是因为组合框DataSource中的id与列不同的类型(bigint)引用它(int)...
答案 4 :(得分:0)
我使用了上面的所有解决方案,但没有一个有效,所以我试图覆盖 DataError event
,它运行良好,没有任何问题:
private void dgv_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
//do nothing
}