2017-08-02 7 views
0

Zuerst von vielen Dank dafür, Zeit auf diesem Pfosten zu nehmen Ich habe ein Problem, das ich in Werte von Excel spreed lege, jetzt wird die Spalte eine Mischung von Leerzeichen und langers sein. Wenn die Zeile leer ist, möchten wir sie löschen und wenn ihre Null oder eine Zahl unverändert belassen wird.Willst nullfähig aber nicht vom gleichen Typ

Gibt es einen besseren Umgang damit.

double _oldNewSpsPrice = Convert.ToDouble(dgUpdatesPrices.Rows[e.RowIndex] 
.Cells["NSPSPRICE"].Value); 

Ursache, wie Sie nicht, wenn Sie eingeben „“ diese Zeile mit einem nicht gültigen statment umfallen werden

Es wird, dass der Eingabestring beklagen ist nicht in der richtigen Format jetzt ich nicht, ich könnte es auf NULL festlegbare machen, aber Ich möchte den leeren String nicht in eine Null verwandeln, sondern ihn so lassen, wie er ist.

Muss ich wirklich hinzufügen, wenn Aussagen überall gibt oder gibt es einen besseren Umgang damit.

Zum Beispiel

enter image description here

Vielen Dank für die Unterstützung.

Edit 2 Auch wenn ich dies tue gibt es mir einen Fehler, wenn ich versuche, auf leer zu prüfen.

if(dgUpdatesPrices.Rows[e.RowIndex].Cells["NSPSPRICE"].Value.ToString()!="") 
+3

TryParse Verwendung mit einem out-Parameter. dann wird es keine Ausnahme geben. Sie können dann überprüfen, ob der Wert des Parameters Null ist oder nicht. sieh dies: https://www.dotnetperls.com/parse –

+0

@alaa_sayegh ist ihre sowieso davon, das in der Klasse zu handhaben würde es hassen, es überall jetzt zu ändern –

+0

In dgUpdatesPrices.Rows [e.RowIndex] .Cells ["NSPSPRICE"] .Wert, ist ein Wert ein Objekt oder eine Zeichenfolge? Wenn es ein Objekt ist, erhalten Sie einen Fehler, indem Sie ToString ausführen, wenn es null ist. –

Antwort

-1

Ich würde vorschlagen, eine Art von C# Extension, wenn es sich wiederholenden Code, den Sie versuchen zu vermeiden. Etwas Liste folgt aus:

public static class StringExtensions 
{ 
    public static bool ShouldWeDeleteThisExcelLine(this string input) 
    { 
     if (string.IsNullOrWhiteSpace(input)) 
      return true; 

     double someValue; 
     if (double.TryParse(input, out someValue) == false) 
      return true; 

     return false; 
    } 
} 

Es wäre wie dieser

if (dgUpdatesPrices.Rows[e.RowIndex].Cells["NSPSPRICE"] 
    .Value.ShouldWeDeleteThisExcelLine()) 
{ 
    /* delete it */ 
} 

----------------------- EDIT verwendet werden (hinzufügen) -----------------------

Wenn Wert ein Objekt und kein String ist, verwenden Sie diese:

public static class MyObjectExtensions 
{ 
    public static bool ShouldWeDeleteThisExcelLine(this object input) 
    { 
     string stringInput = (string) input; 

     if (string.IsNullOrWhiteSpace(stringInput)) 
      return true; 

     double someValue; 
     return double.TryParse(stringInput, out someValue) == false; 
    } 
} 

Es wäre so verwendet werden:

if (dgUpdatesPrices.Rows[e.RowIndex].Cells["NSPSPRICE"] 
    .Value?.ShouldWeDeleteThisExcelLine() ?? true) 
{ 
    /* note the safe navigation operator ?. since extension work on instantiated objects */ 
    /* delete it */ 
} 

Eine Alternative ist, eine Hilfsmethode

public class MyHelpers 
{ 
    public static bool ShouldWeDeleteThisExcelLine(object input) 
    { 
     string stringInput = (string) input; 

     if (string.IsNullOrWhiteSpace(stringInput)) 
      return true; 

     double someValue; 
     return double.TryParse(stringInput, out someValue) == false; 
    } 
} 

if (MyHelpers.ShouldWeDeleteThisExcelLine(
    dgUpdatesPrices.Rows[e.RowIndex].Cells["NSPSPRICE"].Value)) 
{  
    /* delete it */ 
} 
+0

Ihr Ruf sollte viel mehr sein, dass eine sehr gepflegte Antwort Sir ist.aber ich würde eine weitere gehen haben eine Spalte für Delation markiert oder ich würde das gleiche Problem haben, wenn es darum geht, es in –

+0

Ihre expression sagt, es erfordert einen String-Wert, so Ihre Verwendung kompiliert –

+0

@ david39ni versuchen Sie die Erweiterung für Objekt oben und schau, ob das funktioniert. Ich vermute, dass Wert ein Objekttyp und kein String-Typ ist. –

Verwandte Themen