A: n tuotoksen mukauttamiseen on useita tapoja ja syitä DBGrid sisään Delfoi. Yksi tapa on lisätä valintaruudut niin, että tulos on visuaalisesti houkuttelevampi.
Oletusarvon mukaan, jos tietoaineistossa on boolean kenttä, DBGrid näyttää ne "True" tai "False" tietokentän arvosta riippuen. Se näyttää kuitenkin paljon paremmalta, jos valitset "totta" -valintaruudun ohjauksen salliaksesi kenttien muokkaamisen.
Luo mallisovellus
Aloita uusi muoto Delphistä ja aseta TDBGrid, TADOTable ja TADOConnection, TDataSource.
Jätä kaikki komponenttien nimet sellaisina kuin ne olivat, kun ne ensin pudotettiin muotoon (DBGrid1, ADOQuery1, AdoTable1 jne.). Aseta Object Inspector -sovelluksella ADOConnection1-komponentin (TADOConnection) ConnectionString-ominaisuus osoittaaksesi näytteen QuickiesContest.mdb MS Access -tietokantaan.
Yhdistä DBGrid1 DataSource1: ään, DataSource1 ADOTable1: ään ja lopuksi ADOTable1 ADOConnection1: ään. ADOTable1 TableName -ominaisuuden tulisi osoittaa artikkeleita koskevalle taulukolle (jotta DBGrid näyttäisi artikkelitiedot-taulukon tietueet).
Jos olet asettanut kaikki ominaisuudet oikein, kun suoritat sovelluksen (ottaen huomioon, että ADOTable1-komponentin aktiivinen ominaisuus on Tosi) sinun pitäisi nähdä oletuksena, että DBGrid näyttää boolean-kentän arvon "True" tai "False" datan arvosta riippuen ala.
Valintaruutu DBGridissä
Jos haluat näyttää valintaruudun DBGrid-solun sisällä, meidän on asetettava yksi valitettavasti käytettävissä olevaa ruutua varten.
Valitse "Tietojen hallinta" -sivu Komponenttipaletti ja valitse a TDBCheckbox. Pudota yksi mihin tahansa lomakkeen kohdalla - sillä ei ole väliä missä, koska suurin osa ajasta se on näkymätön tai kelluu ristikon yli.
Kärki: TDBCheckBox on tietoinen ohjaus, jonka avulla käyttäjä voi valita yhden arvon, joka sopii boolean kenttiin.
Aseta seuraavaksi Näkyvä-ominaisuudeksi Väärä. Vaihda DBCheckBox1: n Väri-ominaisuus samaan väriin kuin DBGrid (niin että se sekoittuu DBGridiin) ja poista kuvateksti.
Tärkeintä on varmistaa, että DBCheckBox1 on kytketty DataSource1: een ja oikeaan kenttään.
Huomaa, että kaikki yllä olevat DBCheckBox1-ominaisuuden arvot voidaan asettaa lomakkeen OnCreate-tapahtumaan seuraavasti:
menettely TForm1.FormCreate (Lähettäjä: TObject);
alkaa
DBCheckBox1.DataSource: = DataSource1;
DBCheckBox1.DataField: = 'Voittaja';
DBCheckBox1.Visible: = Väärä;
DBCheckBox1.Color: = DBGrid1.Color;
DBCheckBox1.Caption: = '';
// selitetty myöhemmin artikkelissa
DBCheckBox1.ValueChecked: = 'Kyllä voittaja!';
DBCheckBox1.ValueUnChecked: = 'Ei tällä kertaa.';
pää;
Seuraavaksi tulee mielenkiintoisin osa. Muokkaamalla boolean-kenttää DBGridissä, meidän on varmistettava, että DBCheckBox1 on sijoitettu boolean-kenttää näyttävän DBGrid-solun yläpuolelle ("kelluva").
Muille (kohdistamattomille) soluille, jotka sisältävät boolen kenttiä ("Voittaja" -sarakkeessa), meidän on annettava graafinen esitys boolen arvosta (True / False). Tämä tarkoittaa, että tarvitset ainakin kaksi kuvaa piirtämistä varten: yksi tarkistetussa tilassa (oikea arvo) ja yksi tarkistamattomassa tilassa (väärä arvo).
Helpoin tapa saavuttaa tämä on käyttää Windows API DrawFrameControl-toimintoa piirtääksesi suoraan DBGrid-kankaalle.
Tässä on DBGridin OnDrawColumnCell-tapahtumakäsittelyohjelman koodi, joka tapahtuu, kun ruudukon on maalattava solu.
menettely TForm1.DBGrid1DrawColumnCell (
Lähettäjä: TObject; const Rect: TRect; DataCol:
Kokonaisluku; Pylväs: TC-pylväs; Osavaltio: TGridDrawState);
const IsChecked: ryhmä[Boolean] of Kokonaisluku =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK tai DFCS_CHECKED);
var
DrawState: Kokonaisluku;
DrawRect: TRect;
beginif (gdFocused sisään Osavaltio) thenbeginif (Sarake. Ala. KenttäNimi = DBCheckBox1.DataField) thenbegin
DBCheckBox1.Left: = Rect. Vasen + DBGrid1.vasen + 2;
DBCheckBox1.Top: = Rect. Yläosa + DBGrid1.top + 2;
DBCheckBox1.Width: = Rect. Oikea - Rect. vasemmalle;
DBCheckBox1.Height: = Rect. Pohja - oikea. top;
DBCheckBox1.Visible: = True;
endendelsebeginif (Sarake. Ala. KenttäNimi = DBCheckBox1.DataField) thenbegin
DrawRect: = Rect;
InflateRect (DrawRect, -1, -1);
DrawState: = ISChecked [sarake. Ala. AsBoolean];
DBGrid1.Canvas. FillRect (Rect);
DrawFrameControl (DBGrid1.Canvas. Kahva, DrawRect,
DFC_BUTTON, DrawState);
pää;
pää;
pää;
Tämän vaiheen lopettamiseksi meidän on varmistettava, että DBCheckBox1 on näkymätön poistuessasi solusta:
menettely TForm1.DBGrid1ColExit (Lähettäjä: TObject);
beginif DBGrid1.SelectedField. KenttäNimi = DBCheckBox1.DataField sitten
DBCheckBox1.Visible: = Väärä
pää;
Tarvitsemme vain kaksi muuta tapahtumaa käsitellä.
Huomaa, että muokkaustilassa kaikki näppäinpainallukset menevät DBGridin soluun, meidän on varmistettava, että ne lähetetään tarkistuslaatikkoon. CheckBoxin tapauksessa olemme ensisijaisesti kiinnostuneita [välilehti] ja [välilyönti] -näppäimistä. [Tab] -välilehden tulisi siirtää tulotarkennus seuraavaan soluun, ja [Space] -vaihtoehdon tulisi vaihtaa valintaruudun tila.
menettely TForm1.DBGrid1KeyPress (Lähettäjä: TObject; var-avain: Char);
beginif (avain = Chr (9)) sitten Lopeta;
jos (DBGrid1.SelectedField. KenttäNimi = DBCheckBox1.DataField) thenbegin
DBCheckBox1.SetFocus;
Lähetä viesti (DBCheckBox1.Käsittely, WM_Char, sana (avain), 0);
pää;
pää;
Voi olla tarkoituksenmukaista, että valintaruudun tekstitys muuttuu, kun käyttäjä tarkistaa tai poistaa valintaruudun. Huomaa, että DBCheckBoxilla on kaksi ominaisuutta (ValueChecked ja ValueUnChecked), joita käytetään valintaruudun edustaman kentän arvon määrittämiseen, kun se on valittu tai poistettu.
Tässä ValueChecked-ominaisuudessa on "Kyllä, voittaja!", Ja ValueUnChecked vastaa "Ei tällä kertaa".
menettely TForm1.DBCheckBox1Click (Lähettäjä: TObject);
beginif DBCheckBox1.Checked sitten
DBCheckBox1.Caption: = DBCheckBox1.ValueChecked
muu
DBCheckBox1.Caption: = DBCheckBox1.ValueUnChecked;
end;
Suorita projekti ja näet valintaruudut Voittaja-kentän sarakkeessa.