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


von Gast (Gast)


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.

von Karl H. (kbuchegg)


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.

von Gast (Gast)


Angehängte Dateien:

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ß

von Simon K. (simon) Benutzerseite


Lesenswert?

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

von Gast (Gast)


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

von Simon K. (simon) Benutzerseite


Angehängte Dateien:

Lesenswert?

1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
9
namespace DGTest
10
{
11
  public partial class frmMain : Form
12
  {
13
    DataTable m_dtField;
14
15
    public frmMain()
16
    {
17
      InitializeComponent();
18
19
      //Tabelle mit 8 Spalten anlegen
20
      m_dtField = new DataTable();
21
      for ( int i=0; i<8; i++ )
22
        m_dtField.Columns.Add( i.ToString(), System.Type.GetType( "System.String" ) );
23
24
      //8 Reihen hinzufügen
25
      for ( int i=0; i<8; i++ )
26
      {
27
        DataRow drOneRow = m_dtField.NewRow();
28
29
        for ( int j=0; j<8; j++ )
30
          drOneRow[j] = ( ( i*8 ) + j ).ToString();
31
32
        m_dtField.Rows.Add( drOneRow );
33
      }
34
    }
35
    
36
    private void btnTest_Click( object sender, EventArgs e )
37
    {
38
      MessageBox.Show( (String) m_dtField.Rows[Int32.Parse( txtRow.Text )][Int32.Parse( txtColumn.Text )] );
39
    }
40
41
    private void frmMain_Load( object sender, EventArgs e )
42
    {
43
      dgField.DataSource = m_dtField;
44
    }
45
46
  }
47
}

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

Im Anhang als fertiges Projekt.

von Gast (Gast)


Angehängte Dateien:

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ß

von Gast (Gast)


Lesenswert?

Danke Simon K.

sieht super aus.

Gruß

von Simon K. (simon) Benutzerseite


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.