これは、Web上で答えを見つけるのに時間がかかりすぎたためです。これはおそらく一般的な問題です - これは私がアプリ。DataGridViewがDataGridViewImageColumnによるデフォルトのエラーダイアログで例外をスローする
次の例外は、DataGridViewの中で発生しました::
System.ArgumentExceptionのDataGridViewImageCellで新しい行が見えるようになり、それにはデフォルト値が設定されていない場合は
は、私のDataGridViewのは、以下の例外がスローされます:パラメータが無効です。 System.Drawing.Image.FromStreamを(ストリームストリーム、ブール useEmbeddedColorManagement、ブールvalidateImageData)」では
で私のセットアップ私は、Visual StudioデザイナでDataGridViewImageColumnsを作成し、その後でのDataTableにDataColumnsのにこれらの列をバインドタイプのDataColumnsのに合わせて、DataGridViewImageColumnsのDataPropertyNameプロパティを設定:。。バイトは[]
しかし、それはまだ新しい行にDataGridViewImageColumnが表示されたときに、この例外がスローされます
メートルのために働いていた2つの回避策があります。 E:
- チェックを外しデザイナーでオプション「を追加有効にする」 - その後、プログラムの行を追加 - などのボタンを使用して - 私はこれは私が初めてラウンドをやったことだと思います。
このようなDataGridViewのDataErrorのイベントハンドル:私は今のところでつもりですが、私は抑制例外のファンではないと私は遅れを見ることができるオプションです
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == DBNull.Value) { e.Cancel = true; } }
をDataGridView行の作成は、ハンドラーによってthrow + Catchされるためです。
MSDN(http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewimagecolumn.aspx)では、RowsAddedイベントを処理してNULL値を強制できます。私はこれを試しました:
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
foreach (DataGridViewCell cell in dataGridView1.Rows[e.RowIndex].Cells)
{
if (cell.GetType() == typeof(DataGridViewImageCell))
{
cell.Value = DBNull.Value;
}
}
}
...うまくいきませんでした。
他のオプションは、列CellTemplateをDataGridViewImageColumnから派生した型に、デフォルト値のnullまたはDBNull.Valueで設定することでした。
今はちょっと遅れています。これは終日終わりました。
私はおそらく私のオプション2に行くつもりですが、誰かが私にオプション3/4を働かせる方法を教えてくれますか?これには最善の方法がありますか?
dataGridView1_RowsAddedの「動作しなかった」とはどういう意味ですか?あなたはそれを正しく接続しましたか?ハンドラに何か設定した場合、ブレークポイントがヒットしましたか、それともまだ例外を受け取ったことを意味しますか? –