Announcement

Collapse
No announcement yet.

Text in Tabelle schreiben bzw. Rastern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Text in Tabelle schreiben bzw. Rastern

    Hallo,
    ich möchte einen Text aus einer text-Datei auslesen (wie dies funktioniert weiß ich) und diesen dann in eine Tabelle schreiben.
    Das Ganze soll so aussehen das jedes Zeichen in einer eigenen Zelle steht.
    Die Tabelle müsste sich dann natürlich dynamisch, also in Abhängigkeit des Textes aufbauen, aber das soll erst der nächste Schritt sein.
    Als erstes möchte einfach eine Tabelle angezeigt bekommen, welche den Text enthält.
    Nur leider scheine ich das DataTable und/oder DataGrid nicht zu kapieren...

    Das Ziel soll sein dass man bestimmte/mehrere Zellen markieren kann, um dann den Inhalt dieser Zellen auslesen und weiterverarbeiten zu können.
    Von der Optik her sollte es auch eher wie ein Text mit einem Raster aussehen, als eine wirkliche Tabelle (dies is aber erst mal zweitrangig).

    Hoffe es kann jemand helfen !

    Danke vorab !

    Viele Grüße,
    ND


    P.S. :
    Ich nutze Visual Studio 2008 Prof. Ed.

  • #2
    Hallo und willkommen,

    ich sehe keinen Grund, warum es über DataTable nicht funktionieren sollte. (Bitte benutze als Speicher für die Daten keinesfalls ein Grid - egal ob das veraltete DataGrid oder das modernere DataGridView.)

    Nur leider scheine ich das DataTable und/oder DataGrid nicht zu kapieren...
    Das ist keine ausreichende Problembeschreibung. Was hast Du versucht (mit Code-Auszug!), woran ist es gescheitert?

    Ein String
    ist (auch) ein Char-Array. Eine DataRow ist (auch) ein Objekt-Array. Dies kann also direkt zugewiesen werden - Auszug aus dem Beispiel der SDK-Doku/MSDN zu ItemArray:
    [highlight=C#]string currentLine;
    DataRow relation = dt.NewRow();
    relation.ItemArray = currentLine.ToCharArray(); // rowArray;
    dt.Rows.Add(relation);[/highlight]
    Wenn Du freilich alle Spalten nach Alphabet sortieren willst oder alle 'a' in der gleichen Spalte haben willst, geht es nicht so einfach. Dann solltest Du aber etwas mehr Informationen über Dein eigentliches Ziel bringen.

    Gruß Jürgen

    Comment


    • #3
      Als erstes möchte ich was wahrscheinlich ganz einfaches :
      Ich möchte eine Tabelle sehen, gefüllt mit bestimmten Daten !

      Code:
              Dim currentLine As String
              Dim row As DataRow
      
              Dim dt As New DataTable
              dt.Columns.Add("EmployeeID", Type.GetType("System.String"))
              dt.Columns.Add("OrderID", Type.GetType("System.Int32"))
              dt.Columns.Add("Amount", Type.GetType("System.Decimal"))
              dt.Rows.Add("Sam", 5, 25.0)
              dt.Rows.Add("Tom", 7, 50.0)
      Was muss ich tun damit mir diese einfache Tabelle auch angezeigt wird ?

      Wenn ich deinen Code-Auszug "übersetze" sieht das so aus :

      Code:
      Dim currentLine As String
      Dim row As DataRow
      row = dt.NewRow()
      row.ItemArray = currentLine.ToCharArray()
      Für diesen letzte Zeile bekomme ich einen Fehler :
      "Value of type '1-dimensional array of Char' cannot be converted to '1-dimensional array of Object' because 'Char' is not a reference type"


      Sortierung oder ähnliches ist nicht nötig.
      Ich möchte eigentlich "nur" eine (erweiterte) Möglichkeit einen Text (mit der Maus) markieren zu können. Dies ist natürlich auch in der einfachen Textbox möglich, jedoch möchte ich diese Art der möglichen Markierung/Auswahl nicht.

      Beispiel :

      Text :
      1 2 3
      4 5 6

      wenn ich diesen Text in einer Textbox habe und ich "2" UND "5" markieren möchte, liefert mir die Auswahl "2 3 4 5". In einer Tabellen kann/könnte ich die Zellen 2 und 5 markieren, und somit auch deren Inhalt

      P.S.:
      Im besten Falle sieht man gar nicht dass man auf einer Tabelle arbeitet, sondern es sieht aus wie ein "formatierter" Text.

      Comment


      • #4
        Originally posted by NickDiamond View Post
        Als erstes möchte ich was wahrscheinlich ganz einfaches :
        Ich möchte eine Tabelle sehen, gefüllt mit bestimmten Daten !

        Was muss ich tun damit mir diese einfache Tabelle auch angezeigt wird ?
        Du musst Dir ein Control dafür auf das Formular holen und die Tabelle anbinden (das kann natürlich weitgehend im Designer gemacht werden):
        Code:
        Dim dgv As DataGridView = new DataGridView()
        dgv.DataSource = dt    //  verbinden
        mainForm.Controls.Add(dgv)    // anzeigen
        Für diesen letzte Zeile bekomme ich einen Fehler :
        "Value of type '1-dimensional array of Char' cannot be converted to '1-dimensional array of Object' because 'Char' is not a reference type"
        Igittigitt, das habe ich nicht beachtet. Ein char kann automatisch als object benutzt werden (implizite Konvertierung), aber für ein entsprechendes Array gilt das nicht. Schau einmal nach, was die Array-Klasse noch alles anbietet (z.B. Clone); irgendwie müsste das mit einem Befehl gehen. Notfalls musst Du jedes Element einzeln in ein Object-Array kopieren.

        Im besten Falle sieht man gar nicht dass man auf einer Tabelle arbeitet, sondern es sieht aus wie ein "formatierter" Text.
        Kannitverstan. Wie wäre es mit einer multiline-TextBox oder einer RichTextBox und der Schriftart Courier?

        Jürgen

        Comment


        • #5
          Danke dir.
          Das DataGridView bekomme ich nun erstellt

          Soweit so gut.
          Aber natürlich sieht dieses für meine Zwecke sehr bescheiden aus.
          Gibt es eine Möglichkeit die Spaltenbreite so einzustellen dass sie nur so gross ist wie der Inhalt PLatz benötigt ? Ich habe da nichts zu gefunden.

          Wie wäre es mit einer multiline-TextBox oder einer RichTextBox und der Schriftart Courier?
          Das geht natürlich schon. Hab ich mir auch schon so gebaut. Aber dann kommt wieder das Problem des Textmarkierens (siehe Beispiel oben, in dem ich nur "2" und "5" markieren möchte.

          Wenn es eine Möglichkeit gibt in einem Textfeld/RichTextbox/whatever ein Raster einzublenden, welches dann die gewünschte Möglichkeit zum Markieren bietet, dann nehme ich diese Möglichkeit gerne an ;-)

          Gruß,
          ND

          Comment


          • #6
            Hallo Nick,
            ich würde das Datagridview im Designer erstellen und dort die Eigenschaft AutoColumnSize auf den Zellinhalt stellen. Den Datasource erst zur Laufzeit nach einlesen der Daten zuweisen (dgv.DataSource=dt). So wird sich das DGV dynamisch der Anzahl der Spalten und Zeilen anpassen. Probier mal.
            Gruß Conny

            Comment


            • #7
              Leider hat das noch nicht ganz die Wirkung erbracht die ich brauche !

              Die Zellen sind zwar schon deutlich kleiner, jedoch noch nicht annähernd so wie ich das möchte.
              Aus irgendeinem Grund is in den Zellen noch "luft", sprich die Zellen sind nicht so klein, wie es der Inhalt eigentlich zulassen würde

              Comment

              Working...
              X