8 Stimmen

Wie zu überprüfen, ob eine ausgewählte Zeile in einem Datagridview leer ist (hat kein Element) C#

Wie würde ich gehen über die Überprüfung, ob eine Zeile Zellen Daten in ihnen haben, dh nicht leer/null.

Ich habe Folgendes ausprobiert:

        if (dgvClient.SelectedRows.Count > 0)
        {
            DataGridViewRow currentRow = dgvClient.SelectedRows[0];
            if (currentRow.Cells.ToString() != String.Empty)
            {
                //The code that will be here will open a form
            }
            else
            {
                MessageBox.Show("Select a non null row");
            }
        }

Aber es scheint nicht zu funktionieren, und mir gehen die Ideen aus :/

Danke für jede Hilfe, Ari

8voto

Eoin Campbell Punkte 42038

.Cells ist eine Sammlung von DataGridViewCell Objekte.

Sie müssen durch diese Sammlung iterieren und jede Zelle testen, um zu sehen, ob sie einen Wert hat...

if (currentRow.Cells.Count > 0) 
{      
   bool rowIsEmpty = true;    

   foreach(DataGridViewCell cell in currentRow.Cells)    
   {
      if(cell.Value != null) 
      { 
          rowIsEmpty = false;
          break;
      }    
   }

   if(rowIsEmpty)
   {
       MessageBox.Show("Select a non null row"); 
   }
   else
   {
       //DoStuff
   }
}

3voto

Jnr Punkte 1218

Eine andere Methode, um zu prüfen, ob eine neue leere Zeile ausgewählt wurde, ist vielleicht

if(dataGridView.CurrentRow.Index == dataGridView.Rows.Count -1)
{
    //you selected a new row
}

1voto

cmj Punkte 97
         for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                for (int j = 0; j < dataGridView1.Columns.Count; j++)
                {
                    DataGridViewCell cell = dataGridView1[j, i];
                    object value = cell.Value;
                    if (value == string.Empty)
                    {
                             //do
                    }
                }
            }

1voto

Glory Raj Punkte 17039

Ich denke, dies kann durch die Behandlung von DataGridView.RowEnter Ereignis getan werden. Das RowEnter-Ereignis tritt ein, wenn eine Zeile den Eingabefokus erhält, aber bevor sie die aktuelle Zeile wird. Zum Beispiel von einer Zelle zu einer anderen Zelle in einer anderen Zeile bewegen.

Prüfen Sie jeden Zellenwert:

 void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
 {
     dataGridView1.Rows[e.RowIndex].ReadOnly = checkrow(dataGridView1.Rows[e.RowIndex]);
 }

 bool checkrow(DataGridViewRow testrow)
 {
        for (int i = 0; i < testrow.Cells.Count; i++)
        {
            if (testrow.Cells[i].Value != null)
            {
                // if datagridview is databound, you'd better check whether the cell value is string.Empty
                if (testrow.Cells[i].Value.ToString() != string.Empty)
                {
                    // if value of any cell is not null, this row need to be readonly
                    return true;
                }

                // if there is an unbound checkbox column, you may need to check whether the cell value is null or false(uncheck).
            }
        }

        // else false
        return false;
 }

1voto

Law Punkte 359

Ich bin überrascht, dass es keine linq-Antwort gibt, also hier ist sie:

if (dataGridView1.Rows.Cast<DataGridViewRow>()
      .Any(x => x.Cells.Cast<DataGridViewCell>()
      .Any(c => c.Value != null)))

DataGrid-Zeilen sind vom Typ DataCollection, der IEnumerable implementiert. Sie müssen nur die Zellen und Zeilen umwandeln.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X