Widocznośc wybranej kolumny w DBgrid

0

mam taki problem chce aby w dbgrid nie wyswietlało mi wybranej kolumny po to aby uzytkownik nie widział jej bo po prostu jest mu to zbyteczne.

Przejrzałem juz troche net i nie moge znaleŹĆ zadnej pomocy ani wskazówki.

dodam tylko tyle ze uzytkownik sam wybiera sobie tabele którą che zobaczyc w DBGRID. odbyw się to poprzez listbox.
mianowicie klika w listbox na nazwe tabeli i wyswietla sobie tabele w dbgrid. w kazdej tabeli jest kolumna o tej samej nazwie i nie chce po prostu aby uzytkownik ją widział czyli zeby wyświetlały sie wszystkie kolumny prócz tej wybranej przeze mnie :-)

0

2x klik na DBGridzie i dodajesz lub usuwasz kolumny, które mają być widoczne.

0

no nie da rady w ten sposób musi byc to zrobione programowo poniewaz
uzytkownik wybiera w czasie działanie aplikacji tabele do wyswietlenia w DBGrid
wiec nie widac zadnych kolumn przy projektowaniu aplikacji jak sie kliknie 2 x na dbgrid :-)

0

To proste, wyjścia są dwa:

  • nie rób select * tylko select pole1, pole2, pole3 ... i na liście pól nie dodawaj pól których nie chcesz widzieć

  • napisze sobie/poszukaj funkcji ColumnByFieldName (może w nowszych wersja Delphi w końcu taka już jest), i po odpaleniu zapytanka zrób ColumnByFieldName('pole4').Width := -1 (pomijam fakt że trzeba sprawdzić czy wynik <> nil)

0

No wkoncu jakies konkrety:)

PIERWSZA OPCJA
"nie rób select * tylko select pole1, pole2, pole3 ... i na liście pól nie dodawaj pól których nie chcesz widzieć"

odpada musi być SELECT * .... poniewaz uzytkownik w kazdej chwili moze dodac na wczesniejszej formatce sobie tabele do niej kolumny i tak dalej. Wiec w nowej tabeli bedą np kolumny o innych nazwach wiec musze wyswietlac SELECT * ... bo nie wiekm z jakiej tabeli bedzie wyswietlane dane.
Poresztą wyświetlanie realizuje inaczej nie IBQUERY tylko IBTABEL a mianowicie tak:
form1.IBTable1.Close;
form1.IBTable1.tablename:=listbox1.Items[listbox1.itemindex]; // tu wybieram tabele z listbox
form1.IBTable1.Active:=true;

DRUGA OPCJA
" napisze sobie/poszukaj funkcji ColumnByFieldName (może w nowszych wersja Delphi w końcu taka już jest), i po odpaleniu zapytanka zrób ColumnByFieldName('pole4').Width := -1 (pomijam fakt że trzeba sprawdzić czy wynik <> nil) "

niestety w DELPHI 6 nie ma takiej funkcji jak ColumnByFieldName a to by rozwiązało mój problem:)

moze jeszce ktos pomoze:)

0

dodam jeszce tyle moze to cos pomoze>

pisze program "aplikacji do statystycznej oceny niezawodności użądzeń mechanicznych."

Uzytkownik takiego programu moze prowadzic sobnie badanie za pomocą jego.
Czyli uruchamia apilkacje stworzona w delphi i za pomocą jej tworzy sobie tabele nadaje jej dowolna nazwe podobnie dodaje sobie do niej kolumny , wprowadza sobie dane i tak dalej
po prostu kompletna obsługa bazy danych z poziomu delphi. BAZA W interbase 6.

APLIKACJA PUZNEJ NA PODSTAWIE TYCH DANYCH PRZEPROWADZA RÓZNE OBLICZENIA JAK SREDIE ARYTMETYCZNE, ODCHYLENIA STANDARDOWE RYSUJE WYKRESY I TYM PODOBNE.

Dlatego ja nie wiem jakie tam beda tabele , nazwy kolumn wiec dlatego nie moge stosowac zapytań secect * pole1, pole 2 i tak dalej
pozdro

0
miroslav napisał(a)

niestety w DELPHI 6 nie ma takiej funkcji jak ColumnByFieldName a to by rozwiązało mój problem:)

Myślę że sam powinieneś sobie poradzić z taką funkcją:

  • result := nil
  • for 0 to dbgrid1.columns.count - 1
  • if dbgrid1.columns[i].fieldname = aFieldName then { result := dbgrid1.columns[i]; break }

Funkcja zwraca kolumnę (TColumn), podejrzewam że jakbyś wpisał hasło w google, to być takie coś znalazł.

0

Hallo miroslav!

b0bik podpowiedzial Ci juz bardzo duzo. Ja tylko dodam, ze jak juz bedziesz wiedzial, ktora kolumne chcesz uktyc, to zrob to po prostu tak:

Column.Visible := false;

Swoja droga nie bardzo wiem jak chcesz ukryc kolumne w DBGrid nie wiedzac jak sie nazywa odpowiednia kolumna w stworzonej przez uzytkownika tabeli. Bo przeciez tak naprawde, to nie wiesz jak on zdefiniuje tabele i jej kolumny:

miroslav napisał(a)

...
Czyli uruchamia apilkacje stworzona w delphi i za pomocą jej tworzy sobie tabele nadaje jej dowolna nazwe podobnie dodaje sobie do niej kolumny, wprowadza sobie dane i tak dalej
...

Co zreszta kloci sie z:

miroslav napisał(a)

... w kazdej tabeli jest kolumna o tej samej nazwie ...

Pozdrawiam
Markus
[???]

0

NAJPIERW SPROSTOWANIE:)

cytat:
"Swoja droga nie bardzo wiem jak chcesz ukryc kolumne w DBGrid nie wiedzac jak sie nazywa odpowiednia kolumna w stworzonej przez uzytkownika tabeli. Bo przeciez tak naprawde, to nie wiesz jak on zdefiniuje tabele i jej kolumny"

ODP : TAK NIE WIEM ALE W KAZDEJ Z TYCH TABEL BEDZIE KOLUMNA POŻĄDKOWA LP I JESZCE JEDNA KOLUMNA U MNIE O NAZWIE FGESTOSCI (POTRZEBNA MI DO ZAPISYWANIA WYNIKÓW KTÓRE DALEJ PUZNIEJ WYKOZYSTUJE)

WIEC UZYTKOWNIK DEFAKTO SAM TWORZY TABELE, NAZWE I TAK DALEJ ALE W KAZDEJ PRZEZ NIEGO STWOZONEJ TABELI ZAWSZE BEDZIE KOLUMNA "LP" I "FGESTOSCI"<--- KTÓRĄ NIE CHCE WŁASNIE POKAZYWAĆ:)

a tera daje rozwiązanie do którego doszedłem i działa:)
JAKO ZE KOLUMNA LP JEST PIERWSZA W KAZDEJ TABELI (INDEX 0) A KOLUMNA FGESTOSCI DRUGĄ (INDEX 1) TO MOGE NAPISAC COS TAKIEGO:

dbgrid1.Columns.Items[1].width:=1;

CHYBA WIECIE CO TO DA:) A WYGLĄDA TO TAK:

http://img255.imageshack.us/img255/3445/hejmn8.png

jak widac kolumna ma szerokosc tak małą ze jej nie widac ( znajduje się miedzy LP a CZAS) a przy okazj ładnie to wygląda bo oddziela kol lp od pozostałych tak jakby podwójna linią:)

dzieki za wsparcie i mobilizacje:)
z góry sorry za moja polszczyzne

1 użytkowników online, w tym zalogowanych: 0, gości: 1