Laden...

DataGridView auf Null prüfen?

Erstellt von phu88 vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.433 Views
P
phu88 Themenstarter:in
10 Beiträge seit 2011
vor 12 Jahren
DataGridView auf Null prüfen?

verwendetes Datenbanksystem: <ms SQL>
Hlalo zusammen,

ich scheine momentan echt auf dem Schlauch zu stehen.
Ich habe ein DataGridView, möchte ein Paar Werte der im DGV markierten Zeile in Textboxen ausgeben, sodass ich sie dort editieren kann - so weit, so gut.

Habe das nun mit dem Datagridview.CellEnter - Ereignisses realisieren wollen, jedoch wirft er mir raus, dass die NullException nicht behandelt wurde.
Klar, er macht es direkt bei Programmstart, wo das DGV noch gar nicht richtig gefüllt ist.

Wie kann ich es nun abfangen?
Weder mit (if DataGridView.Rows.Count != null), noch mit dem Value funktioniert es... 😦

276 Beiträge seit 2007
vor 12 Jahren

Hallo phu88,

ungetestet:


DataGridView.DataSource == null

?

Gruss

nitro

P
phu88 Themenstarter:in
10 Beiträge seit 2011
vor 12 Jahren

Das war es leider nicht - hätte mich auch geärgert, wäre es so einfach gewesen 😃
So sieht es aus - vielleicht habe ich auch in der Syntax sonst etwas falsch??


    if (dataGridView1.DataSource != null)
            {
                textBox2.Text = dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex + 1].Cells[4].Value.ToString();
}

M
4 Beiträge seit 2011
vor 12 Jahren

Hallo,
versuch es mal so.....


    if (dataGridView1.CurrentCell.RowIndex != -1)
            {
                textBox2.Text = dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex + 1].Cells[4].Value.ToString();
}

Ich hole mir zuerst immer bei CellClick den RowIndex. Den frage ich dann ab.

Gruß
Martin

Mit freundlichen Grüßen

Martin

P
phu88 Themenstarter:in
10 Beiträge seit 2011
vor 12 Jahren

Führt leider auch zu dem gleichen Fehler.

Ach - was ich noch hätte sagen sollen, ich frage das Ganze mit dem "RowEnter"-Ereignis ab. Ich möchte nämlich, dass sich durch die Zeilen mit der Maus oder mit den Pfeiltasten navigieren lässt, und den jeweils aktuellen Inhalt immer in den Textboxen ausgeben.

Irgendwo ist der Wurm drin

M
4 Beiträge seit 2011
vor 12 Jahren

Führt leider auch zu dem gleichen Fehler.

Ach - was ich noch hätte sagen sollen, ich frage das Ganze mit dem "RowEnter"-Ereignis ab. Ich möchte nämlich, dass sich durch die Zeilen mit der Maus oder mit den Pfeiltasten navigieren lässt, und den jeweils aktuellen Inhalt immer in den Textboxen ausgeben.

Irgendwo ist der Wurm drin

Dann mach mal bitte folgendes. Der Benutzer wird sicherlich in das DataGridView klicken. Dann merk dir dort den RowIndex.


     private void dgvFehler_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            RowIndex = e.RowIndex;
         }

Nun soll bei Tasten hoch, runter die Daten angezeigt werden


    private void dgvFehler_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Down)
            {
                if (RowIndex != -1)
                {
                    if (RowIndex != dgvFehler.RowCount - 1)
                    {
                        RowIndex++;
                    }
                    Machwas(RowIndex);
                }
            }
            if (e.KeyCode == Keys.Up)
            {
                if (RowIndex != -1)
                {
                    if (RowIndex != 0)
                    {
                        RowIndex--;
                    }
                    Machwas(RowIndex);
                }
            }
        }

Gruß
Martin

Mit freundlichen Grüßen

Martin

P
phu88 Themenstarter:in
10 Beiträge seit 2011
vor 12 Jahren

Bedeutet zwar mehr Quellcode - aber es funktioniert-

Danke!

R
158 Beiträge seit 2007
vor 12 Jahren
BindingSource wäre sinnvoll(er)

Hier zeigt sich, dass die Verwendung einer BindingSource das Ganze etwas 'geschmeidiger' macht:


public Form1() {
   InitializeComponent();

   BindingSource meineBindingSource = new BindingSource();
   meineBindingSource.DataSource = meinDataTable; // oder auch DataSet.Table[xyz];
   meineBindingSource.CurrentChanged += new EventHandler(meineBindingSource_CurrentChanged);
   meinDataGridView.DataSource = meineBindingSource;

...
}

	  void meineBindingSource_CurrentChanged(object sender, EventArgs e)
	  {
		  DataRow row = ((DataRowView)meineBindingSource.Current).Row;
		  if (row != null)
		  textBox2.Text = row[4].ToString();
	  }


Sinnvoll wäre aber auch, die Textbox(en) direkt an die zugrunde liegende Datenquelle zu binden - besonders dann, wenn man in den Textboxen noch Änderungen vornehmen will... und die Änderungen sicherlich auch in die Tabelle übernehmen möchte 😉


  textBox3.DataBindings.Add("Text",meineBindingSource, NameDerSpalte);