Autor Beitrag
PoiSoN
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 08.08.07 14:27 
Hallo zusammen,

ich hoffe, ich bin mit meinem Thread im richtigen Forum gelandet.

Ich habe eine DataTable tblData mit den Spalten (z.B.) "Author", "File" und "Date" erzeugt.

In meiner GUI habe ich ein DataGridView dataGridView, in dem ich die DataTable anzeigen möchte.
Mit
    this.dataGridView.DataSource = tblData;
klappt das natürlich auch.

Allerdings werden dann alle Spalten genau gleich groß angezeigt.

Also habe ich mir im DataGridView über "Add Columns" die Spalten "Author", "File" und "Date"
angelegt und ihnen meine gewünschte Breite gegeben.

Wenn ich das Programm jetzt ausführe, werden in meinem DataGridView die Spalten "Author", "File"
und "Date" in richtiger Breite - aber leer - angezeigt, und für die Daten aus der DataTable werden
einfach neue gleichgroße Spalten erstellt; das sieht dann in etwa so aus:
ausblenden Quelltext
1:
2:
3:
4:
| Author     | File                  | Date    | Author | File   | Date   |
|------------|-----------------------|---------|--------|--------|--------|
|            |                       |         | ABC    | a.txt  | 1.2.07 |
|            |                       |         | XYZ    | x.txt  | 2.2.07 |

soll aber so aussehen:
ausblenden Quelltext
1:
2:
3:
4:
| Author     | File                  | Date    |
|------------|-----------------------|---------|
| ABC        | a.txt                 | 1.2.07  |
| XYZ        | x.txt                 | 2.2.07  |



Weiß jemand, wie ich meine DataTable-Spalte "Author" der DataGridView-Spalte "Author" usw.
zuweisen kann, damit dafür keine neue Spalte erstellt wird?

Oder wie ich mein Problem auf andere Art lösen kann, also meine DataTable-Daten mit meiner gewünschten
Spaltenbreite im DataGridView anzuzeigen?

Danke für eure Hilfe im Voraus :)
mfG PoiSoN
DareDevil
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 70

Windows7
C# (VS 2010)
BeitragVerfasst: Mi 08.08.07 15:54 
Habe schon lange nicht mehr mit einem DataGridView gearbeitet. Aber ich glaube du kannst einmal nach dem du Daten eingefügt hast die Spaltenbreite bearbeiten. Und zweitens auf die eigenen erstellten Spalten über ein DataTable befüllen lasse.

Habe aber keine Ahnung wie das genau nochmal geht.

Greez

DareDevil
PoiSoN Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 08.08.07 16:28 
Hallo DareDevil,

user profile iconDareDevil hat folgendes geschrieben:
Aber ich glaube du kannst einmal nach dem du Daten eingefügt hast die Spaltenbreite bearbeiten.

Leider weiß ich nicht, wie du das meinst...

user profile iconDareDevil hat folgendes geschrieben:
Und zweitens auf die eigenen erstellten Spalten über ein DataTable befüllen lasse.

Und wie das geht war meine Frage... Also wie kann ich die im DataGridView erstellten Spalten
"Author" usw. mit der Spalte "Author" der DataTable befüllen lassen?

Gruß
PoiSoN
DareDevil
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 70

Windows7
C# (VS 2010)
BeitragVerfasst: Mi 08.08.07 16:39 
Über die Eigentschaften kannst du ja die DataSource hinzufügen und wenn du dann eine neue Spalte über den Designer erstellst kannst du zwischen "Datengebundene Spalte" und "Nicht gebundene Spalte" aussuchen da nimmst du dann einfach das erste also "Datengebundene Spalte" und da kannst du dann auch die entsprechnde Spalte auswählen.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 08.08.07 16:40 
Der erste Versuch kann immer mit AutoGenerateColumns beginnen. Jürgen
PoiSoN Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 08.08.07 17:08 
user profile iconDareDevil hat folgendes geschrieben:
Über die Eigentschaften kannst du ja die DataSource hinzufügen [...]

Bei "Choose Data Source" kann ich nur "(none)" auswählen. Meine DataTable wird dort nicht angezeigt.


user profile iconJüTho hat folgendes geschrieben:
Der erste Versuch kann immer mit AutoGenerateColumns beginnen.

Wenn ich AutoGenerateColumns auf false setzte, werden die neuen Spalten nicht mehr eingefügt
(immerhin schonmal etwas ;)... danke!), allerdings werden die anderen Spalten nicht mit meinen Daten
befüllt :-/ ich habe also weiterhin leere Spalten richtiger Breite. Weiß jemand weiter?

Vllt hilft ein wenig Code...
Die DataTable mit ihren Spalten:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
            tblData = new DataTable();
            String[] columnHeaders = new String[] { "Author""File""Date" };
            DataColumn column = null;
            foreach (String columnHeader in columnHeaders)
            {
                column = new DataColumn();
                column.DataType = System.Type.GetType("System.String");
                column.ColumnName = columnHeader;
                tblData.Columns.Add(column);
            }


Die vom Designer generierten Spalten meines DataGridViews:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
            // 
            // Author
            // 
            this.Author.HeaderText = "Author";
            this.Author.Name = "Author";
            this.Author.ReadOnly = true;
            // 
            // File
            // 
            this.File.HeaderText = "File";
            this.File.Name = "File";
            this.File.ReadOnly = true;
            this.File.Width = 300;
            // 
            // Date
            // 
            this.Date.HeaderText = "Date";
            this.Date.Name = "Date";
            this.Date.ReadOnly = true;


Und jetzt würd ich gern irgendwie sagen "Fülle this.Author mit tblData["Author"]".
Ich weiß nur nicht wie...
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 08.08.07 18:10 
Wenn ich das Stichwort AutoGenerateColumns hinschmeiße, gehe ich davon aus, dass der Frager selbst in der Doku nachliest. Da steht dann u.a.:
Zitat:
Spalten werden automatisch generiert, wenn diese Eigenschaft auf true ist festgelegt ist und die DataSource-Eigenschaft oder die DataMember-Eigenschaft festgelegt sind oder geändert werden. Spalten können auch automatisch generiert werden, wenn die AutoGenerateColumns-Eigenschaft von false in true geändert wird.

Vielleicht verstehst Du nun, warum "false" als Einstellung nicht zum Ziel führt. Jürgen
PoiSoN Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 08.08.07 21:57 
user profile iconJüTho hat folgendes geschrieben:
Wenn ich das Stichwort AutoGenerateColumns hinschmeiße, gehe ich davon aus, dass der Frager selbst in der Doku nachliest. [...] Vielleicht verstehst Du nun, warum "false" als Einstellung nicht zum Ziel führt. Jürgen

Doch, ich habe die Doku gelesen und daraufhin auf "false" gestellt, weil ich ja eigentlich nicht wollte, dass der mir
selbst noch Spalten anhängt, sondern meine im DataGridView definierten mit der richtigen Spaltenbreite benutzt und die
Daten dort reinlädt...

Wenn ich AutoGenerateColumns auf "true" setze, werden die Spalten an meine anderen angehangen und ich hab die Spalten
doppelt. Ich weiß leider nicht, wie ich die über AutoGenerateColumns auf "true" erzeugten Spalten per Code in ihrer
Breite verändern kann. @Jürgen: Weißt du, ob das möglich ist?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 09.08.07 20:30 
ausblenden C#-Quelltext
1:
2:
3:
            this.Author.HeaderText = "Author";
            this.Author.Name = "Author";
            this.Author.ReadOnly = true;
Du verlangst es von ihr, trotzdem kann deine Spalte (leider) nicht hellsehen: Auch wenn sie den Namen "Author" trägt, kann sie nicht wissen, welche Tabellenspalte sie denn nun anzeigen soll - bevor sie also falsch rät, zeigt sie lieber einfach mal überhaupt nichts an. Du musst ihr schon eineindeutig zeigen, welchen Inhalt sie annehmen soll; suche also einmal im SDK nach einer passenden Property, die so etwas bewerkstelligen könnte.