mikrocontroller.net

Forum: PC-Programmierung C# Feld 8*8 Werte ein- und ausgeben


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

möchte mir mit Visual C# in einer Windows Form ein Feld von 8 Zeilen und 
8 Spalten anlegen.
In den einzelnen Feldern sollen Zahlenwerte angezeigt werden. Die Felder 
sollen wie in Excel editierbar sein.

Nun habe ich schon Textboxen aneinander gereiht.
Diese stellen mir die Funktion die ich benötige. Das Eingeben und 
Anzeigen von Text.
Soweit bestens. Aber bei 64 Textboxen leidet die Performance stark.

Mit DataGridView und ListView habe ich auch schon bischen 
experimentiert.
Allerdings scheint mir das derzeit etwas kompliziert.

Suche quasi eine Funktion oder ein Tool wo ich sagen kann:

Zeichne mir ein Feld von
          x Spalten
          Y Zeilen
Und ich kann wie bei einer Textbox z.B. das Feld x.y editieren und den 
dort eingegebenen Wert z.B. in einem anderen x.y ausgeben.

Bei einer "ListView" habe ich es bereits geschafft, Text in Feldern 
auszugeben. Nur scheitert es da gerade am Text eingeben über das Feld in 
der "ListView".


Würde mich über Hilfe freuen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was du suchst, ist genau ein DataGrid bzw. ein DataGridView.

Wenn dir das jetzt etwas kompliziert in der Bedienung vorkommt,
dann lässt sich das nicht ändern. Da musst du durch.

www.codeproject.com
www.codeguru.com

Besonders den ersten Link kann ich dir nur ans Herz legen.
Gib dort einfach mal im Suchfeld "Grid C#" ein und du solltest
genügend Artikel finden, die dich weiter bringen.

Autor: Gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe es nun geschafft, ein Feld von 8*8 Zellen zu erstellen.
Den Spalten Header ließ ich mal eingeblendet und den Zeilen Header habe 
ich ausgeblendet.

Gibt man in der letzten Zeile einen Wert ein, so wird -gewollt- nicht 
automatisch eine neue Zeile angehängt. (Anhang)

Das 8*8 Feld habe ich so erzeugt.

dataGridView1.ColumnCount = 8; // legt Anzahl der Spalten fest
dataGridView1.RowCount = 8; // legt Anzahl der Zeilen fest

Nun komme ich allerdings nicht dahinter, wie ich die einzelnen Zellen 
auslesen kann. Oder umgekehrt, mit welchem Befehl ich den einzelnen 
Zellen einen Wert aus z.B. einem Array zuweisen kann.

Für Bemerkungen in die richtige Richtung dankbar.

Gruß

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin mir nicht ganz sicher, aber das müsste über die "Items" 
Auflistung gehen.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das mit dem "Items" funktioniert wohl nur in Verbindung mit einer 
"ListView".

Habe mich nun vorerst auf DataGridView festgelegt.

Habe irgendwo gelesen, dass ich meine Werte zuerst in eine "DataTable" 
ablegen muss und diese DataTable dann an das DataGrid "binde".

dataGridView1.DataSource = aNewDataTable;

Also mein Data Grid ist 8*8 Zellen.

Wie kann ich nun in aNewDataTable die Zelle 1,1 mit z.B. 8 befüllen und 
die Zelle 2,3 mit z.B. 7 ???

Nach abarbeiten dieser Anweisung
dataGridView1.DataSource = aNewDataTable;

sollte dann die 8 und die 7 an entsprechender Stelle im Grid auftauchen.

Wie kann ich andererseits Informationen die ich in das Data Grid 
eintippe auslesen???

Wäre nett, wenn jemand der sich auskennt, ein paar Zeilen Code tippen 
könnte. Vielleicht für ein 2*2 Feld. Einmal Werte zuweisen und Werte 
auslesen.

Danke

Autor: Simon K. (simon) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DGTest
{
  public partial class frmMain : Form
  {
    DataTable m_dtField;

    public frmMain()
    {
      InitializeComponent();

      //Tabelle mit 8 Spalten anlegen
      m_dtField = new DataTable();
      for ( int i=0; i<8; i++ )
        m_dtField.Columns.Add( i.ToString(), System.Type.GetType( "System.String" ) );

      //8 Reihen hinzufügen
      for ( int i=0; i<8; i++ )
      {
        DataRow drOneRow = m_dtField.NewRow();

        for ( int j=0; j<8; j++ )
          drOneRow[j] = ( ( i*8 ) + j ).ToString();

        m_dtField.Rows.Add( drOneRow );
      }
    }
    
    private void btnTest_Click( object sender, EventArgs e )
    {
      MessageBox.Show( (String) m_dtField.Rows[Int32.Parse( txtRow.Text )][Int32.Parse( txtColumn.Text )] );
    }

    private void frmMain_Load( object sender, EventArgs e )
    {
      dgField.DataSource = m_dtField;
    }

  }
}

Wobei dgField das DataGrid ist, frmMain die Form, txtRow und txtColumn 
jeweils ein Textfeld und btnTest ein Button.

Im Anhang als fertiges Projekt.

Autor: Gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe nun eine für mich zufriedenstellende Lösung gefunden.

Für alle die, die einfach nur Werte aus einem Array oder Konstanten oder 
vergleichbares in einem "Kastenfeld" anzeigen oder Zellen aus dem "Feld" 
auslesen wollen, hier meine Lösung.


private void button1_Click(object sender, EventArgs e)
{
            dataGridView1.ColumnCount = 3; // legt Anzahl der Spalten 
fest
            dataGridView1.RowCount = 4; // legt Anzahl der Zeilen fest

            dataGridView1[0, 0].Value = 0;
            dataGridView1[0, 1].Value = 1;
            dataGridView1[0, 2].Value = 2;
            dataGridView1[1, 0].Value = 10;

}

private void button2_Click(object sender, EventArgs e)
{
            a = Convert.ToByte(dataGridView1[0, 0].Value);
            a = Convert.ToByte(dataGridView1[0, 1].Value);
            a = Convert.ToByte(dataGridView1[0, 2].Value);
            a = Convert.ToByte(dataGridView1[1, 0].Value);
}


Gruß

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Simon K.

sieht super aus.

Gruß

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So kannte ich das auch noch nicht. Danke ebenfalls ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.