2016-10-03 6 views
2

Verwendung von Datagridview in ich eine Zeichenfolge, die enthält: „Anzahl der Zeilen, Anzahl der Spalten, Row'X'Col'X '= Serial #, ...Visual Studio C#

Wie ich ein Datagrid erstellen Sie Tabelle mit der Anzahl der Zeilen und Spalten definiert ist, und dann die seriellen #s in das Netz legen

. Beispiele:

2,1, R1C1 = 111, R2C1 = 112,

2,2 , R1C1 = 211, R1C2 = 212, R2C1 = 213, R2C2 = 214,

danke

+0

Ich verstehe nicht wirklich, was Sie hier fragen: _then der Rest der Variablen in die richtigen Zellen eingeben, ohne jede hard_coding_? – JohnG

+0

Willst du jeden PLX in die Reihenfolge 60 oben links, 62 unten links, 61 oben rechts und 63 unten rechts setzen? Wenn ja, benutze die Zahlen und verwende ein Vielfaches von 4 in deinem Algorithmus. – Javaturtle

+0

Es sieht wie eine einfache string.split .. auf der Eingabezeichenfolge aus, um die RXCX-Werte zu erhalten. Dann würdest du die Dimensionen kennen, die für das Raster benötigt werden. – JohnG

Antwort

1

Unten ist Code, der das tut, was Sie fragen; Ich muss jedoch auf einige Probleme mit diesem Ansatz hinweisen. Zunächst ist es riskant, die gesamten Zeilen und Spalten der ersten beiden Elemente zu erhalten, um Ihre Tabelle zu erstellen. Wenn diese Daten falsch sind, wird dieser Code höchstwahrscheinlich abstürzen oder möglicherweise Daten auslassen. Beispiel wenn die Eingabe ist: 2,2, RXCX = .., RXCX = .., RXCX = .., RXCX = .., RXCX =, RXCX = ... Diese Zeile erhält nur die ersten 4 Werte.

Schlimmer ... dies wird abstürzen ... wenn die Eingabe 2,2 ist, RXCX = .., RXCX = .. Dann wird es abstürzen, wenn Sie versuchen, auf das vierte Element im splitArray zuzugreifen, weil es kein viertes Element gibt . So oder so ist es nicht gut.

Mein Punkt ist, sicher zu sein ... es wäre ein besserer Ansatz, um zu sehen, wie viele Daten tatsächlich vorhanden sind, bevor Sie das Gitter erstellen. Sie können mit StringArray.Length abzüglich der ersten beiden Elemente ermitteln, wie viele Elemente vorhanden sind. Diese Elemente definieren die Dimensionen und ermöglichen es Ihnen, deren Gültigkeit zu überprüfen. Dies stellt sicher, dass Ihre Schleifen nicht außerhalb der Grenzen liegen, da die gelieferten Daten falsch waren. Es erscheint überflüssig und fehleranfällig, die Dimensionswerte zu liefern, wenn Sie diese Informationen aus den Daten selbst erhalten können.

Ich bin immer noch nicht 100% sicher, was Sie hier erreichen wollen. Es sieht wie eine Suche nach irgendeiner Form aus. Dies ist, was ich vorstelle ... Betrachten Sie Ihre (vorherigen) Screenshots erscheint mir, dass, nachdem Sie in das Serial # Textfeld eingeben und klicken Sie auf die Schaltfläche "Search Txt Files" es nach Daten suchen, die aus der Eingabezeichenfolge kam dh "PLX51 ..." und dann zeigt das Gitter die "gefilterten" Ergebnisse an, die übereinstimmen (oder LIKE sind), was in der Serial # -Textbox ist. Wenn dies zutrifft, würde ich die RXCX-Variablen ignorieren und die Daten in eine einzige Spalte setzen. Verbinden Sie dann ein OnKeyPress-Ereignis für das Textfeld, um das Raster zu filtern, wenn der Benutzer in das Textfeld Serial # eingibt. Ansonsten bin ich verloren, warum Sie die Daten in der beschriebenen Weise erstellen müssten. Nur weil die Eingabe unnötige Daten enthält, heißt das nicht, dass Sie sie verwenden müssen. Nur ein Gedanke.

string inputString = "2,2,R1C1=211,R1C2=212,R2C1=213,R2C2=214"; 
    string[] splitArray = inputString.Split(','); 
    int totalRows = int.Parse(splitArray[0]); 
    int totalCols = int.Parse(splitArray[1]); 
    int itemIndex = 2; 

    // add the columns 
    for (int i = 0; i < totalCols; i++) 
    { 
    dataGridView1.Columns.Add("Col", "Col"); 
    } 
    // add the rows 
    dataGridView1.Rows.Add(totalRows); 


    for (int i = 0; i < totalRows; i++) 
    { 
    for (int j = 0; j < totalCols; j++) 
    { 
     dataGridView1.Rows[i].Cells[j].Value = splitArray[itemIndex]; 
     itemIndex++; 
    } 
    } 
+0

Das ist großartig! Ist es möglich, die Zeilen zu invertieren, so dass row1-Elemente in der unteren Zeile sind und die am höchsten nummerierten Zeilenelemente in der oberen Zeile sind? Wie würde ich mit dieser Methode nur die letzten 5 Zeichen des Wertes in die Zelle drucken? – TimmRH

+0

Sie möchten, dass die Zellen wie 1 = 211 oder 2 = 212 aussehen? – JohnG

+0

Nun, das waren vereinfachte Beispiele, die Zahlen sind normalerweise 8-12 Ziffern, aber ich möchte nur die letzten 4 oder 5 Ziffern anzeigen. Ich habe das "RXCX =" bereits aufgeteilt, indem ich den String (',', '=') aufspalte und den Index auf zwei erhöhe. – TimmRH