DataGridViewComboBox值无效?

时间:2012-06-11 17:54:59

标签: c# .net winforms datagridview datagridviewcombobox

我一直收到一条说明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;
}

5 个答案:

答案 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
}