Autor Beitrag
pascalsv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
BeitragVerfasst: Do 16.10.08 18:31 
Hallo zusammen,

ich möchte eine Tabelle aufbauen, in der nicht nur Texte in den Zellen stehen, sondern auch ComboBoxen und Buttons zu finden sind. Beim initialen Füllen würde ich gerne dazu eine List<string> verwenden. Leider funktioniert dies spätestens bei den ComboBoxen nicht mehr. Dabei soll der Eintrag in der Combobox eben dieser String sein.

Was tun?
ausblenden C#-Quelltext
1:
2:
foreach (variableEntry varEntry in m_reportEntry.getVariableList())
      dataGridView1.Rows.Add(varEntry.getText(), varEntry.getHighExt());


wobei variableEntry definiert ist als:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
    public class variableEntry
    {
        private string vText;
        private string highExt;
        private string lowExt;

        public variableEntry()
        {
        }
.
.
.
getter und setter Methoden
.
.
.


Wie würdet ihr den DataGridView mit Buttons und ComboBoxen füllen?

Danke,

Pascal
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 16.10.08 19:38 
Du kannst ein DGV nicht mit einer beliebigen Liste von Controls befüllen. Du kannst aber einzelne Zeilen als Buttons oder Comoboboxen anzeigen lassen, indem du im Designer deren ColumnType setzt.

PS:
ausblenden C#-Quelltext
1:
getter und setter Methoden					

Kann es sein, dass du noch an Java/... gewöhnt bist? In C# solltest du dafür Properties nutzen.

_________________
>λ=
pascalsv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
BeitragVerfasst: Do 16.10.08 19:57 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst ein DGV nicht mit einer beliebigen Liste von Controls befüllen. Du kannst aber einzelne Zeilen als Buttons oder Comoboboxen anzeigen lassen, indem du im Designer deren ColumnType setzt.


HM, mir ist das noch nicht klar. Ich habe in der DesignTime das datagridview konfiguriert und die Spalten angelegt. Jeder Eintrag meines arrays enthält nun für jedes dieser Spalten einen Wert -> ich arbeite zeilenbasiert.

Folge ich Deinem Rat, dann müßte ich die Spalten zur Laufzeit deklarieren, richtig? Kann ich dann dort jeder Spalte eine Spalte meines Arrays mitgeben?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
DataGridViewTextBoxColumn colTextBox;
colTextBox = new DataGridViewTextBoxColumn();
colTextBox.DataPropertyName = "Names";
colTextBox.DataSource = myDataTable;  //was gebe ich hier mit??
colTextBox.DisplayMember = "Names";
colTextBox.HeaderText = "Choose Names";
colTextBox.Name = "colTextBox";
dataGridView1.Columns.Add(colTextBox);

DataGridViewComboBoxColumn cln_cmb_birthay;
cln_cmb_birthay = new DataGridViewComboBoxColumn();
cln_cmb_birthay.DataPropertyName = "Names";
cln_cmb_birthay.DataSource = myDataTable;  //oder hier??
cln_cmb_birthay.DisplayMember = "Names";
cln_cmb_birthay.HeaderText = "Choose Names";
cln_cmb_birthay.Name = "cln_cmb_birthay";
dataGridView1.Columns.Add(cln_cmb_birthay);


:roll:

Pascal
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 16.10.08 22:26 
user profile iconpascalsv hat folgendes geschrieben Zum zitierten Posting springen:
HM, mir ist das noch nicht klar. Ich habe in der DesignTime das datagridview konfiguriert und die Spalten angelegt. Jeder Eintrag meines arrays enthält nun für jedes dieser Spalten einen Wert -> ich arbeite zeilenbasiert.
Dann weiß ich nicht, wo du nun hängst. Wenn du zum Beispiel eine Text- und eine Button-Spalte hinzugefügt hast, solltest du über den Add(Object[])-Overload je Zeile zwei Strings hinzufügen können.

_________________
>λ=
pascalsv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
BeitragVerfasst: Sa 18.10.08 08:41 
Hallo Sebastian,

hier meine Konstallation:
List<variableEntry> beinhaltet die Daten
variableEntry hat die Properties "vText" und "signOpt", beides strings

Mein DataGridView soll nun zwei Spalten erhalten. Die rste zeigt den Text vText an, die zweite eine ComboBox mit den Einträgen ("EQ", "LE", "GE" und "TA"). Aus diesen Werten soll derjenige ausgewählt werden, der in der Property "signOpt" von variableEntry steht.

Das habe ich versucht:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
BindingSource bindingSourceSignOpt;
BindingSource bindingSourceData;
DataSet dataSet;

DataGridViewTextBoxColumn vTextCol;
DataGridViewTextBoxColumn highExtCol;
DataGridViewComboBoxColumn signOptCol;

try
{
//build entries for comboboxes --> signOpt
List<string> signOptList = new List<string>();
signOptList.Add("EQ");
signOptList.Add("GE");
signOptList.Add("LE");
signOptList.Add("TA");

                //DataGridView
                vTextCol = new DataGridViewTextBoxColumn();
                vTextCol.DataPropertyName = "vText";
                vTextCol.HeaderText = "Variable Text";

                dgvVariables.DataSource = variableList;

}
.
.
.


Danke für jeden Tip, wie das funzen könnte!!

Pascal
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: Sa 18.10.08 10:49 
@Kha (und andere, spätere Leser)
Pascal hat dieselbe Diskussion mit ausführlichen Hinweisen auch hier geführt. Jürgen
pascalsv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
BeitragVerfasst: Sa 18.10.08 17:34 
Hallo JüTho,

das ist völlig richtig. Leider konnte mir bisher in dem anderen Thread auch nicht geholfen werden. Oder siehst Du einen Lösungsvorschlag, den ich für mein Problem anwenden kann? Oder gibt es das - ungeschriebene - Gesetz, dass man nur in einem Forum posten darf?? Wie man sieht, gebe ich mir aber die Mühe, mein Problem sorgfältig zu beschreiben und man sieht auch, dass ich vorher einiges probiert habe.

????

Pascal
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: Sa 18.10.08 19:18 
Nein, kein Vorwurf an Dich; siehe meinen anderen Kommentar. Jürgen
pascalsv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
BeitragVerfasst: So 19.10.08 12:31 
Hallo zusammen,

ich bin einen kleinen Schritt weiter gekommen. Durch eine neue Methode kann ich das datagridview abermals durchlaufen und z.B. die Schriftfarbe ändern:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
private void checkForHelpAvail(DataGridView variableView) 
        {
            foreach (DataGridViewRow dr in variableView.Rows) 
            {
                if(dr.Cells[2].FormattedValue.Equals("I")) 
                {
                    dr.Cells[1].Style.ForeColor = Color.Red;
                }
            }
        }


Allerdings bleiben noch zwei Fragen offen:
- Wie kann ich die gewünschte Zelle eleganter auswählen, als über ihren Index (dr.Cells[2])? Gesucht ist die Zelle, deren zugehörige Spalte einen gewissen DataProperty-Wert hat.
- Ich möchte, je nach Wert, eine Zelle ganz ausblenden, d.h. ihr Inhalt soll leer sein. Z.B. ist helpAvail = false, dann soll eine Button-Zelle leer sein. Wie kann ich dies erreichen?

Vielen Dank & schönen Sonntag,

Pascal