2011-08-03 7 views
5

W jaki sposób można przechodzić przez wiersze DataGridView na raz (mam 2 kolumny), a następnie przechowywać te 2 kolumny w zmiennej, które będę używać jako parametr kwerendy sql?Jak mogę uzyskać wartości wierszy DataGridView i zapisać je w zmiennych?

foreach (DataGridViewRow Datarow in contentTable_grd.Rows) 
      { 
       contentValue1 = Datarow.Cells[0].Value.ToString(); 
       contentValue2 = Datarow.Cells[1].Value.ToString(); 

       SqlParameter param4 = new SqlParameter("@contentTableValue1", contentValue1); 
       SqlParameter param5 = new SqlParameter("@contentTableValue2", contentValue2); 

      } 

dostaję ten błąd przy stosowaniu tego kodu -

Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.

+0

Co pan chce zrobić, że kod nie osiągnąć? –

+0

@andrewcooper Mam 2 kolumny i dla każdego wiersza chcę uzyskać te wartości i zapisać je w zmiennej, która następnie zostanie wstawiona do bazy danych, a następnie przejść do następnego wiersza. –

+0

Która linia podaje błąd? Czy istnieje "contentTable_grd"? –

Odpowiedz

3

Znaleziony problem Potrzebowałem if aby zapobiec pustych komórek od przechodzi

foreach (DataGridViewRow Datarow in contentTable_grd.Rows) 
    { 
     if (Datarow.Cells[0].Value != null && Datarow.Cells[1].Value != null) 
     { 
      contentValue1 = Datarow.Cells[0].Value.ToString(); 
      contentValue2 = Datarow.Cells[1].Value.ToString(); 
      MessageBox.Show(contentValue1); 
      MessageBox.Show(contentValue2); 
     } 

    } 
+1

Dobry połów. Jedną z rzeczy, którą możesz wziąć pod uwagę, która jest czasami CHCESZ przekazać wartości null do twojej procedury ... Również - sprawdź string.isnullorempty() jako możliwy zamiennik! = NULL ... – Chains

1

co to jest contentValue1?

Nie jesteś pewien C# - czy można niejawnie wpisać zmienną? Może spróbuj coś takiego string contentvalue1 = ...

Ponadto, w zależności od rodzaju sterowania może być w komórce ... można coś zrobić jak

string contentvalue1 = CTYPE(DataRow.FindControl("myTextbox"),textbox).text

5

Najprawdopodobniej problemem jest, że jeden lub oba Komórki, do których się odwołujesz, zawierają wartość pustą, a wyjątek jest generowany podczas próby wywołania ToString() w takiej komórce.

Jednym z rozwiązań jest użycie ?? operator, aby powrócić do wartości domyślnej dla parametru, jeśli wartość komórki jest zerowy:

contentValue1 = Datarow.Cells[0].Value ?? string.Empty; 
contentValue2 = Datarow.Cells[1].Value ?? string.Empty; 

Ten kod zwróci pusty ciąg jeżeli wartość danej komórce jest null; możesz chcieć użyć innej wartości domyślnej.

Powiązane problemy