Toon posts:

[.NET] Usercontrol aan windows datagrid

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste Tweakers,

Iemand enig idee hoe je aan het standaard windows datagrid van C# aan een kolom een usercontrol kan koppelen? Zodat deze bijvoorbeeld een processbar gevuld laat zien in een kolom met numerieke waarden?

Ik heb al gezocht en kwam bij het ExtendedDatagrid uit van LeadIT. Op zich best mooi en het is gewoon een override van het standaard grid, maar er zitten wat grote bugs in, dus onbruikbaar. Nu wil ik het zelf op het grid doen maar vind nergens hoe.

Op een web grid weet ik het wel, daar is het vrij simpel. Waarom is dit in windows nou weer zo lastig?

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

OZ-Gump

terug van weggeweest

Je zou natuurlijk een eigen implementatie van het datagrid kunnen maken en die uitbreiden met de mogelijkheid om een progressbar weer te geven. Volgens mij is dat nog best realiseerbaar ook.

Lijkt me dus eerder dat je niet een usercontrol aan een datagrid moet hangen, maar een eigen datagrid moet maken...?

My personal website


Verwijderd

Topicstarter
Hmmm... blijft lastig. http://weblogs.asp.net/jan/archive/2004/01/06/48032.aspx gaat inderdaad over dat ExtendedDatagrid, maar die crashed als je deze aan een datatable bind. Binden aan een object array wil hij wel, maar het is een vrij buggy ding.

Ik ben inderdaad al begonnen met het overriden van de datagrid om een eigen variant te maken, maar dat is nog best wel pittig. Ik had eigenlijk de hoop dat zoiets al gewoon goed geimplementeerd zou bestaan.

  • SlowMeDown
  • Registratie: Mei 2003
  • Laatst online: 05-05 12:44
Dat bestaat best goed geimplementeerd, kost echter wel geld. Ik weet niet of je iets voor jezelf aan het maken bent of voor de baas, maar in plaats van heel veel tijd investeren in iets dergelijks, kun je ook eens naar een commerciele oplossing kijken.

Neem bijvoorbeeld de controls van DevelopersExpress (http://www.devexpress.com). Hun GridControl kan ik jou van harte aanbevelen. Ik ben nu prive bezig met een eigen applicatie en ik heb de hele subscription bij DevelopersExpress genomen. Doet één keer pijn, maar dan heb je ook een paar hele gave controls.

Verwijderd

Topicstarter
Tnx voor de link!. Het mag alleen niets kosten :(. Balen dat er standaard zo weinig goede controls in VS zitten. Ik ga nu aan mijn windows applicatie heel lelijk een browser component toevoegen en maak dit grid dan in HTML. Blijft extreem lelijk, maar werkt volgens mij wel.

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 00:59

alienfruit

the alien you never expected

Ja, maar waarom ze nou mij mails blijven sturen terwijl ik geen subscription meer heb :( Ik denk elke keer weer joepie nieuwe updates, nee hoor. Alleen van hun persistent objects product, maar dat gebruik ik toch nooit.

Verwijderd

Topicstarter
Mogelijk nog een gratis grid met veel mogelijkheden: http://www.codeproject.com/cs/miscctrl/csharpgridcontrol.asp

Ik ga nu kijken of ik hem werkend kan krijgen met koppeling aan usercontrols, maar het lijkt veelbelovend.

[Edit:] Okee, best een mooi (en vooral ook gratis) grid, maar het toevoegen van een eigen usercontroll aan een kolom is net zo lastig als dat je deze aan de standaard datagrid wilt gaan binden.

[ Voor 31% gewijzigd door Verwijderd op 21-07-2005 17:35 ]


  • titan_pi8
  • Registratie: Januari 2004
  • Laatst online: 22:49
Ik heb gedaan wat jij wil doen, maar dan in VB.NET. (Geen progressbar, maar andere modificatie van een kolom). Ik zal zeggen hoe ik het heb gedaan:

Een nieuwe class maken op basis van een DataGridTextBoxColum, deze aanpassen tot wat je wilt hebben. Dus gewoon een progressbar toevoegen met de nodige properties enzo, ik ga er van uit dat je hiermee vertrouwd bent.

Dan voeg je deze nieuwe class gewoon in in de DataGrid:

code:
1
2
3
4
Dim aTextColumn As newDataGridTextBoxColumn
Dim tableStyle As New DataGridTableStyle
tableStyle.GridColumnStyles.Add(aTextColumn)
DataGrid1.TableStyles.Add(tableStyle)


Niet vergeten de juiste mappingnames te gebruiken, anders zal het niet werken!

Hopelijk is het duidelijk, anders laat je het maar weten...

Verwijderd

Topicstarter
Hee!, bedankt voor die tip!. Ik had al wel het vermoeden dat het hiermee zou moeten kunnen maar wist niet dat het relatief zo simpel zou zijn... alleen..., als je override van DataGridTextBoxColumn heb je geen designer voor je componenten meer (als in een usercontrol). Ik denk dat je hier het PAINT event voor moet overriden maar daar kom ik nog niet helemaal uit. Heb je misschien een klein stukje voorbeeld code hiervan?

  • titan_pi8
  • Registratie: Januari 2004
  • Laatst online: 22:49
Mmh in mijn geval was het makkelijk: ik wou gewoon de achtergrondkleur van een bepaalde cell kunnen aanpassen dus moest ik in het pain event gewoon de backcolor veranderen en dan opnieuw painten

backbrush = new solidbrush(color.gewenstekleur)
MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight)

(de andere argumenten bij mybase.paint krijg je gegeven door de paint method te overriden, als je kan volgen.)

Om een progressbar toe te voegen weet ik niet precies hoe je deraan begint maar het moet zeker te doen zijn.

Verwijderd

Topicstarter
Okee, bedankt alvast!, ik ga het proberen.

  • titan_pi8
  • Registratie: Januari 2004
  • Laatst online: 22:49
Dit zal je waarschijnlijk veel helpen:


http://64.78.52.104/FAQ/WinForms/FAQ_c44c.asp#q827q

Zie vraag 5.57: 'How do I display a column of buttons such as pushbuttons or combobox buttons?'

Verwijderd

Topicstarter
titan_pi8 schreef op woensdag 27 juli 2005 @ 17:01:
Dit zal je waarschijnlijk veel helpen:


http://64.78.52.104/FAQ/WinForms/FAQ_c44c.asp#q827q

Zie vraag 5.57: 'How do I display a column of buttons such as pushbuttons or combobox buttons?'
Hmmm... jammer genoeg niet heel veel. De DataGridComboColumn en DataGridButtonColumn bestaan al en daarom is dat vrij simpel (wel een mooie link trouwens!). Ik ben er nu achter dat het moet met een inheritance van DataGridColumnStyle. Je moet dan alleen zelf het control laten tekenen (via de paint method).

Een voorbeeld hiervan gebruiken ze ook in de door jou aangegeven WinForms link, maar dan om een icoontje in de column te laten zien. En een icoontje heeft geen velden die ergens op moeten reageren, zoals het usercontrol. Ik kan nu uiteindelijk wel mijn usercontrol zichzelf laten weergeven in de juiste kolom, maar het reageert nu echt helemaal nergens op.

Ik vind het dus nog steeds best wel lastig. Raar eigenlijk, want het lijkt mij echt heel handig als dit gewoon goed werkt.
Pagina: 1