Suunniteltu siten, että käyttäjä voi tarkastella ja muokata tietoja taulukkomuodossa, DBGrid tarjoaa erilaisia tapoja mukauttaa tapa, jolla se edustaa "sen" tietoja. Niin paljon joustavuutta, a Delfoi kehittäjä voi aina löytää uusia tapoja tehdä siitä tehokkaamman.
Yksi puuttuvista TDBGrid-ominaisuuksista on, että ei ole vaihtoehtoa säätää tiettyjen sarakkeiden leveyttä automaattisesti ruudukon asiakasleveyden mukaiseksi. Kun muutat DBGrid-komponentin kokoa suorituksen aikana, sarakkeen leveyttä ei muuteta.
Jos DBGrid-levy on leveämpi kuin kaikkien sarakkeiden kokonaisleveys, saat tyhjän alueen heti viimeisen sarakkeen jälkeen. Toisaalta, jos kaikkien sarakkeiden kokonaisleveys on suurempi kuin DBGridin leveys, vaakasuuntainen vierityspalkki tulee näkyviin.
Säädä DBGrid-sarakkeen leveydet automaattisesti
Voit suorittaa yhden kätevän menettelytavan, joka korjaa valikoivien DBGrid-sarakkeiden leveydet, kun ruudukon kokoa muutetaan ajon aikana.
On tärkeätä huomata, että yleensä vain kaksi tai kolme saraketta DBGridissä on tosiasiallisesti muutettava automaattisesti. kaikissa muissa sarakkeissa näkyy "staattisen leveyden" tietoja. Voit esimerkiksi määrittää aina kiinteän leveyden sarakkeille, jotka näyttävät arvoja tietokentistä, jotka on esitetty TDateTimeField, TFloatField, TIntegerField ja vastaavat.
Lisäksi luot todennäköisesti (suunnittelun aikana) pysyviä kenttäkomponentteja Kenttäeditorin avulla määrittääksesi tietojoukon kentät, niiden ominaisuudet ja tilauksen. TField-laskeutuvassa objektissa voit käyttää Tag-ominaisuutta osoittaaksesi, että tietyn sarakkeen, jolla kyseisen kentän arvot näytetään, on oltava automaattinen koko.
Tämä on idea: Jos haluat sarakkeen sovittavan käytettävissä olevaan tilaan automaattisesti, määritä kokonaisluku arvo TField-jälkeläisen Tag-ominaisuudelle, joka ilmaisee vastaavan sarakkeen minimileveyden.
FixDBGridColumnWidth-menettely
Ennen kuin aloitat, OnCreate-tapahtuma Määritä DBGrid-muotoa sisältävälle lomakeobjektille, minkä sarakkeiden kokoa täytyy muuttaa automaattisesti määrittämällä vastaavan TField-objektin Tag-ominaisuudelle nolla-arvo.
menettely TForm1.FormCreate (Lähettäjä: TObject);
alkaa// aseta automaattista vaihdettavaa saraketta kohdistamalla
// Minimm-leveys Tag-ominaisuudessa.
// käyttäen kiinteää arvoa: 40 px
Taulukko1.FieldByName ('FirstName') .Tagi: = 40;
// käyttämällä muuttuvaa arvoa:
// sarakkeen otsikkoteksti Taulukko1.FieldByName ('LastName') .Tagi: = 4 + kangas. Tekstin leveys (taulukko1.FieldByName ('LastName'). DisplayName);
pää;
Yllä olevassa koodissa taulukko 1 on TT-komponentti, joka on linkitetty a: hon DataSource-komponentti, joka on linkitetty DBGrid-ohjelmaan. Taulukko1.Taulukohde osoittaa DBDemos Employee -taulukkoon.
Olemme merkinneet sarakkeet, joissa näytetään FirstName- ja LastName -kenttien arvot, automaattikokoisiksi. Seuraava vaihe on soittaa FixDBGridColumnsWidth -sovellukselle lomakkeen OnResize-tapahtumakäsittelylaitteessa:
menettely TForm1.FormResize (Lähettäjä: TObject);
alkaa FixDBGridColumnWidth (DBGrid1);
pää;
Huomautus: Kaikki tämä on järkevää, jos DBGridin Align-ominaisuus sisältää yhden seuraavista arvoista: alTop, alBottom, alClient tai alCustom.
Lopuksi tässä on FixDBGridColumnsWidth-menettelyn koodi:
menettely FixDBGridColumnsWidth (const DBGrid: TDBGrid);
var i: kokonaisluku; Kokonaisleveys: kokonaisluku; VarWidth: kokonaisluku; ResizableColumnCount: kokonaisluku; AC-pylväs: TC-pylväs;
alkaa// kaikkien sarakkeiden kokonaisleveys ennen koon muuttamista
Kokonaisleveys: = 0;
// kuinka jakaa ylimääräinen tila verkkoon
VarWidth: = 0;
// kuinka monta saraketta täytyy muuttaa automaattisesti
ResizableColumnCount: = 0;
varten i: = 0 että -1 + DBGrid. Sarakkeita. Kreivi dobegin
Kokonaisleveys: = Kokonaisleveys + DBGrid. Sarakkeet [i] .Width;
jos DBGrid. Sarakkeet [i] .Field. Tunniste 0 sitten
Inc (ResizableColumnCount);
pää;
// lisää 1 px sarakkeen erotusrivillejos dgColLines DBGridissä. vaihtoehdot sitten
Kokonaisleveys: = Kokonaisleveys + DBGrid. Sarakkeita. Kreivi;
// lisää osoitinsarakkeen leveysjos dgIndicator DBGridissä. vaihtoehdot sitten
Kokonaisleveys: = Kokonaisleveys + Indikaattorinleveys;
// leveä vale "vasen"
VarWidth: = DBGrid. ClientWidth - TotWidth;
// Jaa VarWidth yhtäläisesti
// kaikkiin automaattisesti koon muuttaviin sarakkeisiinjos ResizableColumnCount> 0 sitten
VarWidth: = varWidth div ResizableColumnCount;
varten i: = 0 että -1 + DBGrid. Sarakkeita. Kreivi dobegin
AC-sarake: = DBGrid. Sarakkeet [i];
jos AColumn. Ala. Tunniste 0 thenbegin
AColumn. Leveys: = AC-sarake. Leveys + VarWidth;
jos AColumn. Leveys sitten
AColumn. Leveys: = AC-sarake. Ala. Tag;
pää;
pää;
pää; (* FixDBGridColumnsWidth *)