3

というエラーが表示され続けますDataGridViewComboBox value is not valid。それも無限ループにあるようです。[OK] をクリックすると、継続的にポップアップし続けます。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

ただし、コンボ ボックスの列に戻したい場合は、特別な処理を設定して設定する必要があります。

こちらの MSDN 記事、または以下の例を参照できます。

MSDN: 列挙型を DataGridView にバインドする

        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

私のデータグリッドビューの1つで同様の経験がありました.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 に答える
0

TextBox 列に属していない ComboBox プロパティがあるため、ある時点で DataGridViewTextBoxColumn が DataGridViewComboBoxColumn だったようです。

DataGridViewTextBoxColumnには以下がありません

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

手動でデザイナーファイルを編集すると、これが発生する可能性があると推測できます。

于 2012-06-11T18:12:04.187 に答える