5

セルが残っているときに、セルの内容に対してテキスト処理を実行しようとしています。次のコードがありますが、セルにテキストを入力してそのままにしておくと、次の例外が発生します。

An unhandled exception of type 'System.NullReferenceException' occurred in Program.exe

Additional information: Object reference not set to an instance of an object.

ブレークしてその上をマウスホバー.valueすると、実際にはnullになりますが、セルにデータを入力しました。では、何が得られるのでしょうか?

private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 3)
    {
        string entry = "";
        MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
        MakeTextFeet(entry);
    }
    if (e.ColumnIndex == 4)
    {
        string entry = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
        MakeTextFeet(entry);
    }
}
4

4 に答える 4

3

DataGridView CellLeaveイベントが発生すると、セルの値は一時的な状態になります。これは、DataGridViewがデータソースにバインドされている可能性があり、変更がコミットされていないためです。

最善のオプションは、CellValueChangedイベントを使用することです。

于 2012-11-13T05:23:45.703 に答える
1

いくつかのチェックを追加します。

DataGridViewCell MyCell =  dataGridView1[e.ColumnIndex, e.RowIndex];

if (MyCell != null)
{
    if (MyCell.Value != null)
    {
    }
}
于 2012-11-13T03:44:33.477 に答える
1

CellLeaveではなくCellEndEditを処理したいと思います。

CellLeaveでは、編集されたセルのValueプロパティは変更されません(つまり、Valueを壊して検査することで観察したように、空のセルの場合はnull)。CellEndEditでは、新しい値が設定されています。

このようなものを試してみてください。私は通常、元のコードに固執しようとしました。

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewCell cell = dataGridView1[e.ColumnIndex, e.RowIndex];

    if (e.ColumnIndex == 3 || e.ColumnIndex == 4)
    {
        string entry = "";
        if (cell.Value != null)
        {
            entry = cell.Value.ToString();
        }
        MessageBox.Show(entry);
        MakeTextFeet(entry);
    }
}
于 2012-11-13T05:03:50.227 に答える
0

空白のセルを残して、その値を処理しようとしていると思います。

次のコードの空白のセル値を残す場合:

string entry = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();

文字列エントリの値は空白スペース(entry = "")になり、この値を別の関数[MakeTextFeet(entry);]に渡してさらに処理すると、エラーが発生します。

この問題に対する私の観点からの解決策は>>>

上記のメソッドにもコードの各行を入れ、tryブロックにもMakeTextFeet(Entry)を入れます。

catchブロックを作成するときは、そのブロックを空のままにします。例えば。

try
{
.
.
.
}
catch(Exception)
{
}

このことにより、あなたの例外は自然に捕らえられますが、その無視できるので、それはあなたに表示されません。

于 2012-11-13T02:32:58.780 に答える