cyberpet Skrevet 6. april 2005 Del Skrevet 6. april 2005 (endret) Jobber med et prosjekt i Delphi .Net (2005), hvor jeg ha et litt snodig problem. (ikke bli skremt hvis du ikke har vært borti det, er akkurat samme komponenter som VS, og ikke såå ulikt VB eller C#) Saken er den at jeg bruker DataGrid. Som source bruker jeg DataTable som jeg fyller fra en DB ved hjelp av SQLAdapter. Gjør alt dette runtime, og alt funker utmerket.. men så kommer problemet: Når jeg prøver å få tilgang til å endre properties for en kolonne, så får jeg en "index out of range" error, f.eks. hvis jeg prøver å skjule en kolonne slik: DataGrid1.Columns[2].Visible := False; Det virker som om kolonnen ikke er der... men den vises jo. Koden over virker dersom jeg prøver å skjule den første kolonnen, som er en select-button kolonne lagt til design-time. Koden funker også dersom jeg oppretter hele databasekoblingen i design-time, men dette er ikke aktuelt å endre foreløpig fordi alt annet funker bra nå + mye jobb å endre.. Jeg har heller ingen problemer med å hente ut data fra DataGriden ved å velge en rad, og så en spesifikk celle... F.eks: DataGrid1.SelectedItem.Cells[2].Text Endret 6. april 2005 av cyberpet Lenke til kommentar
Gråskjegg Skrevet 6. april 2005 Del Skrevet 6. april 2005 Hadde ikke jeg samme problem, mon tro? Forsøker du å skjule kolonnen etter DataBind? - grå - Lenke til kommentar
cyberpet Skrevet 6. april 2005 Forfatter Del Skrevet 6. april 2005 Jepp, skjuler etter.. Får samme feil når jeg skjuler før også. Funker bra å skjule etter DataBind når jeg legger til Source og databasekoblinger design-time... Mistenkte i starten at det kunne være slik at postback tømte datagriden etter den ble vist til skjerm slik jeg har gjort det, men kan jo ikke stemme det heller når jeg får tak i dataene etterpå... Lenke til kommentar
j000rn Skrevet 6. april 2005 Del Skrevet 6. april 2005 Hva med å prøve: http://nfproedit.com Lenke til kommentar
cyberpet Skrevet 6. april 2005 Forfatter Del Skrevet 6. april 2005 Hmm.. så veldig interessant ut, skal merke meg den siden, men har ikke behov for det akkurat i dette prosjektet tror jeg... ihvertfall ikke foreløpig (blir litt overkill). Trenger ikke så avansert Grid funksjonalitet med det første.. og design må vi ta til slutt.. Hadde håpet på en enkel løsning på problemet mitt bare, trenger nemlig å få skjult en kolonne med en id bare, som brukeren ikke trenger å se.. (men må ha den med i SQL setningen...) Har vurdert å bruke 2 SQL setninger, men det blir ikke bra kode.. Lenke til kommentar
oyvind_b Skrevet 6. april 2005 Del Skrevet 6. april 2005 Du kan kanskje gjøre dette med selve tabellen før binding, slik: myTable.Columns["IDKolonnenavn"].ColumnMapping = MappingType.Hidden; Øyvind Lenke til kommentar
cyberpet Skrevet 6. april 2005 Forfatter Del Skrevet 6. april 2005 Funket ikke det heller.. kolonnen vises allikevel, og dersom det hadde fungert, hadde jeg kanskje ikke fått tak i verdien fra Griden? vet ikke.. har en mulig løsning jeg skal prøve etter hvert: Slå av autogenerate columns og så definere de kolonnene jeg trenger manuelt i ASP koden på forhånd.. Men skal ikke bruke mer tid på det med det samme, er andre ting som må komme først.. Vet at det ikke er en helt enkel løsning, for har fått bekreftet at griden ikke vet riktig antall kolonner, Columns.Count gir nemlig tilbake bare 1... takker for all hjelp Lenke til kommentar
Gråskjegg Skrevet 7. april 2005 Del Skrevet 7. april 2005 har en mulig løsning jeg skal prøve etter hvert: Slå av autogenerate columns og så definere de kolonnene jeg trenger manuelt i ASP koden på forhånd.. Nemlig; i de tilfelle jeg har ønsket det samme, har jeg tatt bort autogenerertheten(!), og har typisk skrevet: BoundColumn invisibleColumn = new System.Web.UI.WebControls.BoundColumn(); invisibleColumn.HeaderText = "Slett"; invisibleColumn.DataField = "blah"; invisibleColumn.Visible = false; resultGrid.Columns.Add( invisibleColumn ); ...men om du bruker format-builder i stedet, har du jo også muligheten til å gjøre kolonner usynlige. Det er kanskje litt enklere enn å gjøre alt manuelt? - grå - Lenke til kommentar
cyberpet Skrevet 8. april 2005 Forfatter Del Skrevet 8. april 2005 Det jeg tenkte først var å legge til kolonnene i ASP koden, men takk for tipset! burde funke like greit å gjøre det i code-behind (det er det jeg liker best også ) Grunnen til at jeg gjør så mye manuelt, er at jeg synes det blir mer oversiktlig når innholdet i griden skal endres/oppdateres, føler også at jeg har mer kontroll med koden enn å sette masse properties, redigere sql og slikt i design mode, men har så klart sine fordeler det og. Hva mener du forresten med Format-builder? Tenker du på Auto Format og Property Builder? Lenke til kommentar
cyberpet Skrevet 8. april 2005 Forfatter Del Skrevet 8. april 2005 (endret) Oki, jeg løste problemet nå! Var rimelig simpelt: 1. Slo av AutoGenerate på DataGriden 2.Opprettet de kolonnene jeg trengte under Property Builder (satte riktig Header Text og DataField...) 3. Skjulte kolonnen (etter DataBind) med DataGrid1.Columns.Visible := False; Takker for all hjelp, det satte meg på riktig spor! NB! Det er viktig å sette DataField for kolonnen til det samme som i kilden(kolonnenavnet) (På denne måten kan man også endre rekkefølgen fra kilden om man vil ) PS: Man får fortsatt tak i verdiene i kolonnen på samme måte, selvom den er skjult Endret 8. april 2005 av cyberpet Lenke til kommentar
bjovas Skrevet 18. april 2005 Del Skrevet 18. april 2005 Kul tråd, skal til å lage omtrent akkurat det samme. * bokmerke * Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå