3

我不断收到一个错误,指出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;
}
4

5 回答 5

2

是的,解决方案是使 datagridviewcombobox 单元格值与您在后面的代码中获得的值相同。

如果我想显示 typeof(int) value ,我必须设置 datagridviewcombobox 单元格的属性,如:

this.ComboboxCellcolumnName.ValueType = typeof(int); 

您获得的值类型(例如 int)应该与您希望在组合框单元格(int)中显示的值类型相同。

于 2013-08-29T11:12:46.710 回答
0

看起来您的 DataGridViewTextBoxColumn 在某些时候是 DataGridViewComboBoxColumn,因为您具有不属于 TextBox 列的 ComboBox 属性。

DataGridViewTextBoxColumn没有

.DataSource = this.AuthorityTypeBindingSource;
.DisplayMember = "Description";
.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
.MaxDropDownItems = 100;
.ValueMember = "Value";

我只能猜测手动编辑设计器文件会导致这种情况。

于 2012-06-11T18:12:04.187 回答
0

但是,如果您想恢复到组合框列,则需要设置一些特殊处理来设置它。

你可以参考这里的 MSDN 文章,或者下面的这个例子:

MSDN:将枚举绑定到 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;
于 2012-12-22T10:33:20.560 回答
0

我刚刚对我的一个 datagridviews 有过类似的体验:DataError 被不停地抛出......最终结果证明是因为组合框 DataSource 中的 id 与引用它的列的类型(bigint)不同(诠释)...

于 2013-04-21T07:51:34.003 回答
0

我使用了上面的所有解决方案,但没有一个起作用,所以我尝试覆盖DataError event它,它运行得很好,没有任何问题:

private void dgv_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
 //do nothing
}
于 2014-05-07T16:38:01.943 回答