2012-04-11 18 views
7

Pracuję nad aplikacją C#, która zawiera wiele DataGridViews, które są puste. Użytkownik musi wypełnić je kopią/wklejonymi danymi z programu Excel. Co zrobić, jest następujący:Zamówienie Datagridview.SelectedCells

int i = 0; 
string s = Clipboard.GetText(); 

// Separate lines 
string[] lines = Regex.Split(s, "\r\n"); 
foreach (string line in lines) 
{ 
    // Separate each cell 
    string[] cells = line.Split('\t'); 
    foreach (string cell in cells) 
    { 
     // If we selected as many cells as copied 
     if (dataGridView.SelectedCells.Count == (lines.Length-1)*(cells.Length)) 
     { 
      dataGridView.SelectedCells[i].Value = cell; 
      i++; 
     } 
    } 
} 

Problem polega na tym, że jeśli skopiować coś takiego (w Excel):

1 2 3 
4 5 6 

Moje DataGridView będzie wyglądać następująco:

6 4 2 
5 3 1 

I nie wiem, co zrobić, aby to naprawić ... Z góry dziękuję

+0

Czy istnieje możliwość utworzenia datatable z tablicą komórek i powiązania danych z datagridem? – ray

+0

@RayMoonDay Nie wiem, czy to dobre rozwiązanie, biorąc pod uwagę, że mam 50 dynamicznie generowanych sieci, tak naprawdę nie używam pamięci, więc nie wiem, czy jest tak wielka, czy nie. I tak mam zamiar to zrobić, dziękuję. – Blowi

+0

Dlaczego potrzebujesz dynamicznie generowanych 50 pustych siatek? Jeśli jednak możesz po prostu wydrukować zmienną "s", która jest kopią schowka, możesz uzyskać informację, czy t jest zgodne z twoimi danymi wyjściowymi, czy z prawdziwym rekordem danych Excela – ray

Odpowiedz

1

Wymień

dataGridView.SelectedCells[i].Value = cell;

z

dataGridView.SelectedCells[(dataGridView.SelectedCells.Count-1) - i].Value = cell;

+0

To jest naprawdę prosta poprawka, ponieważ jeśli wybiorę od dołu w prawo do u góry po lewej to nie działa. W każdym razie użytkownik będzie musiał ostrożnie, dzięki :) – Blowi

2
  1. Konwersja wklejenie danych do 2-wymiarowej tablicy. Zapamiętaj długość każdego wymiaru.
  2. Powtórz wybrane komórki i znajdź komórki z lewej i prawej strony. Z tego można ustalić, że ma odpowiedni rozmiar.
  3. Za pomocą podwójnej pętli odwzoruj dane ze swojego schowka z położenia tablicy bezpośrednio na współrzędne komórki (nie używając wybranych komórek), używając współrzędnej komórki tylnej jako przesunięcia.

Zamiast tablicy dwuwymiarowej można utworzyć listę małej klasy/struktury zawierającej właściwości Wiersz, Kolumna i Wartość. Następnie po prostu wykonaj iterację zamiast podwójnej pętli.

+0

Pomyślałem o tym i faktycznie wypróbowałem (ale na odwrót, sortując zaznaczone komórki na liście i zapętlając), dziękuję też :) – Blowi