Laden...

DataGrid (1.1) binding an CollectionBase

Erstellt von DarKlajid vor 16 Jahren Letzter Beitrag vor 14 Jahren 3.099 Views
D
DarKlajid Themenstarter:in
386 Beiträge seit 2007
vor 16 Jahren
DataGrid (1.1) binding an CollectionBase

Hi.

Irgendwie gehen mir die Suchworte langsam aus. Was ich machen moechte ist folgendes:

Ein DataGrid (Ich arbeite in diesem Projekt gezwungenermassen noch mit 1.1) soll eine Liste von (von mir erstellten) Objekten darstellen. Die einfachste Variante die ich bisher gefunden hab sieht so aus:


public class FilterCollection : CollectionBase {
...
}

public class FilterItem {
// Hier mein eigener Kram, z.B.
public string Foo { get { return "Bar"; } }
public string Bla { get { return "Fasel"; } }
}

und irgendwo halt erstelle ich eine solche Collection, befuelle sie mit Items, haenge sie an ein DataGrid und die Properties werden automagisch angezeigt.

Nun moechte ich genau dieses Defaultverhalten aendern: Ich wuerde gerne:

  • Spalten verstecken/in der Reihenfolge aendern
  • Titel/Header Texte anders nennen als die Properties

Zunaechst sahen DataGridTableStyle und DataGridTextBoxColumn ganz passabel aus, aber offensichtlich kann ich in diesem Szenario nicht mit MappingName arbeiten.
Eine DataGridTextBoxColumn mit .MappingName "Foo" bezieht sich leider nicht auf die Property Foo. Irgendwelche Tricks wie ich das doch noch hinbekomm?
Die Daten kommen aus keiner Datenbank, es gibt keine irgendwie relevante Datenquelle bisher, d.h. ADO.Net kann mir nicht helfen.

Danke im voraus,
Ben

Pound for pound, plutonium is about as toxic as caffeine when eaten.

H
9 Beiträge seit 2007
vor 14 Jahren

Hallo,

habe exakt das selbe Problem. Ich muss auch mit .Net 1.1 arbeiten und möchte nur bei der Darstellung die Reihenfolge der Spalten ändern.

Ich habe eine Daten-Klasse



public class MyDataClass : IMyData
	{
		private string		_name;
		private string		_input;
		private string		_output;
		private DataPriority  _priority = DataPriority.Normal;
		
		public MyDataClass(string name, DataPriority priority)
		{
			this._name = name;
			this._priority = priority;
		}
		
		[ReadOnly(true)]
		public string Name
		{
			get
			{
				return this._name;
			}
		}
		

		[ReadOnly(true)]
		public string Output
		{
			get
			{
				return this._output;
			}
			
			set
			{
				this._output = value;
			}
		}
		
		[ReadOnly(true)]
		public string Intput
		{
			get
			{
				return this._input;
			}
			
			set
			{
				this._input = value;
			}
		}

		[ReadOnly(true)]
		public DataPriority Prioprity
		{
			get
			{
				return this._priority;
			}
		}

	}



class Test
{
	private ArrayList _dataItems;

	// Hier übergeben ich die Namen der Dateien die sich in einen Ordner befinden,
	// woraus dann einzelne MyData objekte erzeugt und in einer ArrayList eingefügt werden
	// Anschließend wird die ArrayList der DataSource des DataGrids übergeben.
	private String[] DataGridItems
		{
			set
			{
				if(value.Count > 0)
				{
					_dataGrid.DataSource = null;
					this._dataItems = new ArrayList();

					for(int i=0; i<value.Count; i++)
						this._dataItems.Add(new MyDataClass(value[i].ToString(), DataPriority.High));

					this._dataGrid.DataSource = this._dataItems;
				}
			}
		}


Der DataGrid zeigt jetzt die Spalten in dieser Reihenfolge an:
Prioprity | Output | Name | Intput |

und ich hätte gerne das ganze in der Reihenfolge dargestellt:
Name | Prioprity | Intput | Output |

Wie kann ich das beeinflussen?

Bin für jeden Hinweis dankbar.

Gruß
Hossain

H
9 Beiträge seit 2007
vor 14 Jahren

Hier die Lösung.

  1. Im Properties-Fenster im Menüpunkt "TableStyles" den "DataGridtableStylxe Collection Editor" öffnen
  2. Mit dem Add-Button unten links einen Member adden
  3. Dann auf der rechten Seite des Editors unter "Behavior" den "AllowSorting"Property auf "false" stellen
  4. "Name" wie gewünscht ändern
  5. Unter "Misc" in der "MappingName"-Zeile "ArrayList" eingeben
  6. Wenn gewünscht "ReadOnly" auf "true"
  7. Weiterhin einen "GridColumnStyles"-Collection anlegen. Hier öffnet sich dann ein weiterer Editor (DataGridColumnStyles Collection Editor)
  8. Hier die Spalten einzeln nach der gewünschten Reihenfolge anlegen. In meinem Fall dataGridTextBoxColumn1 bis 4
  9. Dann bei den jeweiligen dataGridTextBoxColumns unter "Misc" die "MappingNames" anpassen. Sie müssen exakt dem entsprechen, die in der "MyDataClass" angegeben sind. In diesem Fall also "Name", "Prioprity", "Intput" und "Output"
  10. Die Spalten-Titel, die dann im Editor angezeigt werden, kann man unter "Header Text" beeinflussen.