DataGridViewの編集中にマウスホイールを動かすと落ちる
Visual Studio Professional 2015
Version 14.0.25123.00 Update 2
Microsoft .NET Framework Version 4.7.02046
C#
返信ありがとうございます。
シンプルな状態でエラーが再現したので投稿を編集しました。
拡張コントロール使用したらエラーが出ると書いていましたが、
拡張コントロールなしでエラーが発生することを確認しました。
発生状況・エラー内容
・DataGridView
を設置する
・DataGridView
のCellValidating
の中でDataGridView
のEndEdit
メソッドを呼んでいる(1)
・BindingSource
を設置する
・DataSet
を作成する
・DataSet
に項目が「項目1」
のみのDataTable
を作成する
・BindingSource
のDataSource
は作成したDataSet
(2)
・DataGridView
のDataSource
は作成したBindingSource
(3)
・Form
起動時に30
行のデータを表示する(4)
・1つのセルを選択し、値を削除した直後にマウスホイールを動かす
⇒エラー
型 'System.InvalidCastException' のハンドルされていない例外が System.Windows.Forms.dll で発生しました
追加情報:型 'System.Windows.Forms.DataGridViewTextBoxCell' のオブジェクトを型 'System.Windows.Forms.IDataGridViewEditingCell' にキャストできません。
ソース
(2)
this.bindingSource1.DataSource = this.dataSet11;
(3)
this.dataGridView1.DataMember = "DataTable1";
this.dataGridView1.DataSource = this.bindingSource1;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// (4)
for(var i=0; i<30; i++)
{
var dr = dataSet11.DataTable1.NewDataTable1Row();
dr.項目1 = string.Format("{0}", i);
dataSet11.DataTable1.AddDataTable1Row(dr);
}
}
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
// (1)
(sender as DataGridView).EndEdit();
}
マウスホイール時の処理中にエラーの原因があるのだろうと思い
以下のような対応をすると、エラーが出なくなりました。
が、原因を知った上で正しい対応をしたいです。
以上、よろしくお願いします
☆☆☆ エラーが出ない方法 ☆☆☆
public Form1()
{
InitializeComponent();
// MouseWheelイベント処理を作成する
this.dataGridView1.MouseWheel += dataGridView1_MouseWheel;
}
// マウスホイールイベント
private void dataGridView1_MouseWheel(object sender, MouseEventArgs e)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
補足。色々していて、同じキャストエラーが出たソース
public Form1()
{
InitializeComponent();
// MouseWheelイベント処理を作成する
this.dataGridView1.MouseWheel += dataGridView1_MouseWheel;
}
// マウスホイールイベント
private void dataGridView1_MouseWheel(object sender, MouseEventArgs e)
{
dataGridView1.FirstDisplayedScrollingRowIndex = 3; // ここでエラーが出る
}