Cześć. Po wielu godzinach rozmyślań i poszukiwań rozwiązań się wypaliłem... Do rzeczy:
Program ma składać się z form1 i form2. W form 2 mam datagridview(wierszy n, kolumn 14). Po uzupełnieniu danych w datagridview i zamknięciu form2, przenoszę dane do tablicy dwuwymiarowej Table[n,14] w form1.
Zależałoby mi na tym, żeby w momencie ponownego otworzenia form2 i uzupełnieniu danych dodawać te dane do tablicy Table (kontynuować tablice). Próbowałem już opcję z trzema wymiarami Table[m,n,14], ale problem pojawia się gdy ilość wierszy w kolejnych datagridview jest różna. Nie mogę wtedy założyć rozmiaru tablicy "n" Table[m,n,14]. Nie wiem też ile razy będzie sporządzany nowy datagridview więc wartość "m" też nie jest znana..
To chyba bez sensu zakładać tablicę Table[100,1000,14] i później usuwać puste miejsca NULL...
Będę wdzięczny za każdą sugestię.
- Rejestracja:ponad 7 lat
- Ostatnio:prawie 7 lat
- Postów:13

- Rejestracja:ponad 8 lat
- Ostatnio:19 dni
- Lokalizacja:Śląsk
- Postów:248
Jeśli ilość danych nie jest przytłaczająca (mówię o tysiącach operacji) to jak mówił @atmal opakuj sobie dane w jaką klasę czy strukturę :). List wydaje się najłatwiejsza do implementacji ale zerknij do reszty typów kolekcji: Rozdział 7
- Rejestracja:ponad 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
Bardzo trafione. W tabli mam 14 kolumn i max 200-300 wierszy. Więc ilość typów obiektów(?) w klasie będzie wynosić 18 (18 kolumn). Ilość wprowadzanych tabel może być różna, ale max 100. Wyników niby robi się sporo, ale chyba bez problemu będę mógł wczytać interesujące mnie dane z powrotem do tabeli...
Nie wiem czy dobrze kombinuje, ale mogę liczyć liczbę wierszy, które wprowadzam do listy z danej tabli (będę znał indeks początkowy i końcowy listy, którą tworzę)?

- Rejestracja:ponad 8 lat
- Ostatnio:19 dni
- Lokalizacja:Śląsk
- Postów:248
Nie bardzo rozumiem, raz piszesz, że masz 14 kolumn raz, że 18 kolumn. Możesz spróbować tworzyć obiekt, jako wiersz w tabeli, który posiada te 18 pól :) i do nich przypisać odpowiednie dane z tabeli. Potem stworzysz np 300 obiektów bo tyle masz wierszy. Lista i wiele innych kolekcji danych , które ci wysłałem nie wymagają deklaracji długości (czy tez wymiarów). Oznacza to, że możesz dowolnie dodawać kolejne obiekty/elementy listy :). Ważne lista musi być typu takiego jak twoje obiekty. https://www.dotnetperls.com/list Tutaj masz przykład jak działa lista. Jeśli chcesz to możesz uzyskać aktualną długość listy korzystając z:
nazwaTwojejListy.Count()
Ja to widzę tak tworzysz klasę która będzie zawierać pojedynczy wiersz:
public class Row
{
///tutaj wpisujesz sobie propertisy, które będą odpowiadać danym przechowywanym w kolejnych kolumnach.
}
Później tworzysz obiekty Row i pakujesz do listy typu row:
var row1 = new Row();
var list = new List<Row>();
list.Add(row1)
- Rejestracja:ponad 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
Przepraszam, oczywiście chodzi o 14 kolumn :) Dziękuję za nakierowanie na sposób. Dopiero zaczynam przygodę z programowaniem i z C#, więc trochę błądzę. Spróbuje zrobić to tak jak piszesz i dam znać jakie wnioski :)

- Rejestracja:ponad 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
Już natrafiłem na problem. Datagridview zawiera na razie 3 kolumny. W pętli for chcę odczytać ZAWSZE pierwszy element listy. Nie wiem dlaczego MessageBox wyświetla mi aktualny element na którym jest pętla, a nie element pierwszy...
class Row
{
public string a;
public string b;
public string c;
}
private void button1_Click(object sender, EventArgs e)
{
var row1 = new Row();
var list = new List<Row>();
for (int r = 0; r < dataGridView1.RowCount; r++) //ilosć powtórzeń równa liczbie wierszy
{
row1.a = dataGridView1[0, r].Value.ToString(); //zapis do row1
row1.b = dataGridView1[1, r].Value.ToString();
row1.c = dataGridView1[2, r].Value.ToString();
list.Add(row1); // dodanie row1 do listy
var row2 = list[0]; // chcę odczytać zawsze pierwszy wyraz z listy (pierwszy wiersz)
MessageBox.Show("a. " + row2.a + ", b. " + row2.b + ", c. " + row2.c);
}
MessageBox.Show("liczba elementów listy: " + list.Count); // liczba elementów listy (liczba wierszy) jest prawidłowa
}
Ilość elementów w liście jest prawidłowa...

- Rejestracja:ponad 8 lat
- Ostatnio:19 dni
- Lokalizacja:Śląsk
- Postów:248
Wydaje mi się, że masz błąd w pętli for według mnie powinna ona tak wyglądać:
private void button1_Click(object sender, EventArgs e)
{
var list = new List<Row>();
for (int r = 0; r < dataGridView1.RowCount; r++) //ilosć powtórzeń równa liczbie wierszy
{
var row1 = new Row();
row1.a = dataGridView1[0, r].Value.ToString(); //zapis do row1
row1.b = dataGridView1[1, r].Value.ToString();
row1.c = dataGridView1[2, r].Value.ToString();
list.Add(row1); // dodanie row1 do listy
MessageBox.Show("a. " + list[0].a + ", b. " + list[0].b + ", c. " + list[0].c);
}
MessageBox.Show("liczba elementów listy: " + list.Count); // liczba elementów listy (liczba wierszy) jest prawidłowa
}
Nie tworzyłeś nowego obiektu tylko zmieniałeś stary obiekt dlatego obserwowałeś aktualne zmiany. Jakbyś podejrzał na debugu to w liście będą takie same obiekty ciągle bo dodajesz ciągle ten sam obiekt.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.