Tengo el siguiente código para introducir un valor anterior en un DataGridView de la célula. Si en la fila 0 y col 2 o mayor, el val a la izquierda, de lo contrario el valor directamente arriba:

private void dataGridViewPlatypi_CellEnter(object sender, DataGridViewCellEventArgs args)
{
    //TODO: Fails if it sees nothing in the previous cell
    string prevVal = string.Empty;
    if (args.RowIndex > 0)
    {
        prevVal = dataGridViewPlatypi.Rows[args.RowIndex - 1].Cells[args.ColumnIndex].Value.ToString();
    } else if (args.ColumnIndex > 1)
    {
        prevVal = dataGridViewPlatypi.Rows[args.RowIndex].Cells[args.ColumnIndex-1].Value.ToString();
    }
    dataGridViewPlatypi.Rows[args.RowIndex].Cells[args.ColumnIndex].Value = prevVal;
}

Esto funciona muy bien como hay un valor para ser visto y copiado. Si la celda está en blanco, aunque, me sale:

Sistema.NullReferenceException fue controlada por el código de usuario

Mensaje=referencia a Objeto no establecida como instancia de un objeto.

Supongo que esta es una oportunidad para el uso de null se unen operador, pero (suponiendo que mi conjetura es bueno), ¿cómo puedo implementar esto?

3 Comentarios

  1. 3

    Suponiendo Valor es lo que es nulo (no totalmente claro en su post) que usted puede hacer

    object cellValue = 
        dataGridViewPlatypi.Rows[args.RowIndex - 1].Cells[args.ColumnIndex].Value;
    prevValue = cellValue == null ? string.Empty : cellValue.ToString()
  2. 5

    Intentar algo como esto:

    string s = SomeStringExpressionWhichMightBeNull() ?? "" ;

    Fácil!

    • Fácil, pero no de la misma manera.
  3. 3

    El uso de un método como:

    public static class MyExtensions
    {
        public static string SafeToString(this object obj)
        {
            return (obj ?? "").ToString();
        }
    }

    a continuación, se puede utilizar como:

    object obj = null;
    
    string str = obj.SafeToString();

    o como un ejemplo de tu código:

    prevVal = dataGridViewPlatypi.Rows[args.RowIndex - 1].Cells[args.ColumnIndex].Value.SafeToString();

    Esto crea un método de extensión, por lo que si se agrega un using para el espacio de nombres que el de las extensiones de la clase es en todos los objetos parecen tener un SafeToString método en intellisense. El método no es en realidad un método de instancia, que sólo aparece como uno, así que en lugar de generar una excepción de referencia nula si el objeto es null, se pasa simplemente null para el método, que trata todos los valores null como cadenas vacías.

    • Muy bonito, gracias Servy, que también me sirve bien.

Dejar respuesta

Please enter your comment!
Please enter your name here