2016-07-08 17 views
0

Ich arbeite an einer Windows Form Application mit C#.Zuordnung von gefilterter DataGridView zu DataRow [] mit Nullwert (Filter hat Ergebnis)

Ich habe ein Formular mit DataGridView, die Sie Eintrag hinzufügen/löschen können, hat Eintrag Qty Spalte, dann eine Save Schaltfläche bearbeitbar.

Beim Anklicken Save, ich möchte die DataGridView Einträge für 0.00 Qty filtern, dann den Benutzer benachrichtigen, dass es/sind eine 0.00 Qty auf der Liste, sonst wird das Speichern fortzufahren. (Siehe Screenshot der Form, bevor Sie auf Speichern klicken)

Form where the user add/delete entry and set the Qty

ich diese auf das untere Formular ein Code haben:

private void SaveBtn_Click(object sender, EventArgs e) 
    { 
     if (isWithZeroQty() == true) 
     { 
      MessageBox.Show("Please check Quantity","System Alert",MessageBoxButtons.OK,MessageBoxIcon.Warning); 
     } 
     else 
     { 
      // Will do the saving.. 
     } 
    } 

    private bool isWithZeroQty() 
    { 
     DataRow[] result = (enrollmedsDataGridView.DataSource as DataTable).Select("Qty = 0.00 OR Qty = 0"); 

     if (result.Count() > 0) 
     { return true; } 
     else 
     { return false; } 
    } 

Mein Problem ist ein NullReferenceException in dieser Zeile aufgetreten:

DataRow[] result = (enrollmedsDataGridView.DataSource as DataTable).Select("Qty = 0.00 OR Qty = 0"); 

Nach meiner weiteren Untersuchung tritt NullReferenceException beim Darstellen von DataGridView als DataTable (enrollmedsDataGridView.DataSource as DataTable) auf.

Ist es, weil DataGridView DataBounded zu BindingSource ist?

Wenn ja, wie kann ich mit diesem umgehen.

Vielen Dank im Voraus für die Hilfe.

Antwort

0

Ich kann immer noch nicht den Grund finden, warum NullReferenceException im obigen Code auftritt.

Aber wie dieses Problem zu umgehen, anstatt Filtering und Casting DataGridView-DataTable benutzen ich foreach auf jeder Zeile die Zelle Qty zu überprüfen, ob es 0 or 0.00 Werte hat, die an meinem Ende gut funktioniert.

Siehe unten Code:

private bool isWithZeroQty() 
    { 
     int zeros = 0; 
     foreach (DataGridViewRow row in enrollmedsDataGridView.Rows) 
     { 
      if ((row.Cells["Qty"].Value.ToString() == "0") || (row.Cells["Qty"].Value.ToString() == "0.00")) 
      { 
       zeros = 1; 
      } 
     } 
     if (zeros > 0) 
     { return true; } 
     else 
     { return false; } 
    }