[.Net] Gegenereerde dataset kolommen standaard public maken

Pagina: 1
Acties:

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Topicstarter
Probleem
De door de XSD tool gegenereerde typed datasets hebben voor de kolommen standaard de access modifier internal. Hierdoor kunnen we die kolommen in refererende assemblies niet aanspreken, terwijl we dat het liefst wel willen....

We kunnen natuurlijk de gegenereerde dataset hacken en de access modifiers aanpassen, maar dat is met het grote aantal datasets niet een ideale oplossing, omdat je dit iedere keer opnieuw moet doen als je een dataset aanpast.

Dit is dus wat we eigenlijk willen kunnen:
C#:
1
2
3
4
5
6
MyDataSet mds = new MyDataSet(); 
myAdapter.Fill(mds); 
listBox.DataSource = mds; 
listBox.DataTextField = mds.myTable.TextColumn.ColumnN­ame; 
listBox.DataValueField = mds.myTable.IDColumn.ColumnNam­e; 
listBox.DataBind(); 


Vraag
Heeft de XSD tool de mogelijkheden om deze modifiers standaard anders te zetten, of zijn er wellicht andere tools beschikbaar die dit mogelijk maken?

Disclaimer ;)
Zoeken op Google (groups) leveren een paar dezelfde vragen op, maar nergens een goede oplossing. Hier op GoT heb ik geen gelijkwaardige topics gevonden...

[ Voor 16% gewijzigd door OZ-Gump op 04-05-2005 11:55 ]

My personal website


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Ik snap je vraag niet. 'myTable.TextColumn.ColumnName' is toch 'Text'? Anders heette dat property niet 'TextColumn' ?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Topicstarter
EfBe schreef op woensdag 04 mei 2005 @ 13:18:
Ik snap je vraag niet. 'myTable.TextColumn.ColumnName' is toch 'Text'? Anders heette dat property niet 'TextColumn' ?
Dan ga ik het proberen duidelijker uit te leggen ;)
Wanneer je je type datasets beschikbaar maakt via een gemeenschappelijke DLL, zijn de kolomnamen niet bereikbaar (omdat ze dus internal zijn). Je zou in je code hardcoded de properties van je controls kunnen binden aan een kolomnaam, maar wanneer een dergelijke kolomnaam wijzigt werkt je applicatie niet meer.

Nou hoor ik je denken "Dat is toch ook zo als je de kolomnaam uitleest uit de kolom en je verandert (de naam van) die kolom?" Dat klopt. Voordeel is dan echter dat je buildtime foutmeldingen krijgt over onbekende kolommen. In het eerste geval krijg je de fouten pas at runtime te zien. Voor 8 schermen zou dat niet zo erg zijn, maar aangezien we bezig zijn met een applicatie voor 250+ schermen is het prettiger als we buildtime onze fouten te zien krijgen, en niet runtime. :)

Het komt er dus eigenlijk op neer dat we ons tegen onszelf in bescherming willen nemen :Y)

My personal website


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Een lelijke workaround, die echter wel @ compiletime checks doet : kan je niet binnen diezelfde namespace een paar helperclasses maken speciaal naar databinding toe ?
vb:

C#:
1
2
3
4
5
6
7
8
9
10
11
public string GetTableIdColumnName(DataTable t) {
  if (t.GetType()==typeof(DataSet.Customers) return ((DataSet.Customers)t).IdColumn.ColumnName;
  if (t.GetType()==typeof(DataSet.Orders) return ((DataSet.Orders)t).IdColumn.ColumnName;
  ...
}

public string GetTableTextColumnName(DataTable t) {
  if (t.GetType()==typeof(DataSet.Customers) return ((DataSet.Customers)t).NaamColumn.ColumnName;
  if (t.GetType()==typeof(DataSet.Orders) return ((DataSet.Orders)t).OrderNummerColumn.ColumnName;
  ...
}

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Ah, dan snap ik je vraag.

Ik kwam deze tegen:
http://www.gotdotnet.com/...f9-46da-abd3-54620bc65ea5

Wellicht doet die wat je wilt :)

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Topicstarter
Heb die tool eens even bekeken, maar dat lijkt niet volledig te doen wat we hier willen. Hij genereert op basis van SQL Server tabellen, terwijl je dat niet altijd wil. Het zou de bedoeling zijn dat dit ook met eigen datasets kan werken.
Misschien ga ik er maar een eigen tool voor maken... In principe zou het voldoende kunnen zijn om na de XSD tool zelf de gegenereerde dataset per direct te muteren. Enige probleem dat we dan overhouden is het uitchecken van die files uit ClearCase, maar daar zijn afspraken over te maken.

Misschien andere mensen nog mogelijke oplossingen?

My personal website


  • EfBe
  • Registratie: Januari 2000
  • Niet online
XSD is gewoon een XML schema, en dat is met wat XSL wel om te zetten naar iets wat je kunt gebruiken voor het genereren van code. Een typed dataset stelt echt geen moer voor hoor, want het grootste deel is columns bouwen, properties genereren binnen een raamwerk van code die altijd hetzelfde is. Leg 2 typed datasets naast elkaar en je hebt het snel door. Eventueel kun je dan een codesmith template gebruiken om de meta-data die je maakt met je XSL. Je kunt ook direct in de XSL de code genereren.

[ Voor 6% gewijzigd door EfBe op 05-05-2005 10:50 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • Scare360
  • Registratie: Juli 2001
  • Laatst online: 06-05 20:53
Ik heb eens de custom typed DataSet generator in ADO.NET Powertoys gebruikt hiervoor (http://adoguy.com/content.aspx?id=code/powertoys).
Pagina: 1