Const array of array w Delphi 2007

0

Mam taki kod:

type
  TColumnField = record
    FieldName: string;
    ColName: string;
    Width: integer;
  end;

  TArrayOfCf = array of TColumnField;
  PArrayOfCf = ^TArrayOfCf;

const
  CF_PRZYJECIE: array[0..1] of TColumnField = (
    (FieldName: 'ID'; ColName: 'ID'; Width: 20),
    (FieldName: 'Name'; ColName: 'Nazwa'; Width: 50)

  );

  CF_KSIEGOWOSC: array[0..2] of TColumnField = (
    (FieldName: 'ID'; ColName: 'ID'; Width: 0),
    (FieldName: 'Group'; ColName: 'Grupa'; Width: 15),
    (FieldName: 'Name'; ColName: 'Nazwa'; Width: 120)

  );

Chciałbym stworzyć tablicę tych tablic. Robię tak:

CF_2: array[0..1] of PArrayOfCf = (
    @CF_PRZYJECIE,
    @CF_KSIEGOWOSC
  );

Mam także funkcje, która zwraca mi odpowiedni CF_ w zależności od parametru:

  function GetColFields(k: integer): TArrayOfCf;
  var
    i : integer;
  begin
    case k of
      101 : result := TArrayOfCf (CF_2[0]);
      102 : result := PArrayOfCf(CF_2[1])^;
    end;
  end;
.
.
.
var
  CF : TArrayOfCf;

  CF := GetColFields(101);

Wywołanie funkcji GetColFields wywala błąd. Nie wiem jak to obejść.

Mogę oczywiście funkcje tą zrobić tak: (To działa):

    case k of
      101 : begin
            SetLength(b, Length(CF_PRZYJECIE));
    for I := 0 to Length(CF_PRZYJECIE) - 1 do
      b[I] := CF_PRZYJECIE[I];
      end;
      102 : begin
            SetLength(b, Length(CF_KSIEGOWOSC));
    for I := 0 to Length(CF_KSIEGOWOSC) - 1 do
      b[I] := CF_KSIEGOWOSC[I];
      end;
    end;
    result := b;

Proszę o pomoc.

4

array of cośtam i array[i..j] of cośtam nie są zgodne ze sobą tak, byś mógł jedno rzutować na drugie.

0

Radzę zawsze opisywać co chcesz osiągnąć a nie jak to chcesz zrobić.

0

Autor (czyli ja :) ) chce jednego grida wykorzystać do wyświetlenia różnych wyników (wartości).
Mam 9 ustawień tego grida.
Od razu zaznaczam, że nie może się to odbywać poprzez zmianę zapytania do bazy danych.

Grid z którego korzystam jest zwykłym gridem nie DBGridem. DBGridy do których mam dostęp nie umożliwiają zaznaczania kilku wierszy, które nie są obok siebie (Poprzez Ctrl i klik myszką).

Chyba, że znacie jakieś rozwiązanie, które to umożliwia? Może to być także kolumna z checkbox'ami. Ale te checkbox'y nie mogą być jako pole w bazie danych. (Mam nadzieję, że wyraziłem się jasno).

0

Czyli masz pewną ilość kolumn z których wg jakieś tam opcji chcesz niektóre kolumny zrobić niewidocznymi?
Czy może się zmieniać kolejność kolumn?
Nazwy tych kolumn?

0

Tak zgadza się. Dane do grida mogą pochodzić z różnych zapytań. Różni użytkownicy powinni widzieć inne kolejności kolumn lub inne kolumny.

0

Moment, jeżeli to różne zapytania to czemu nie użyjesz automatu, który wpiszę cię wszystkie kolumny co masz w tym zapytaniu?

0

Bo to nie zawsze różne zapytania. Mam procedurę SQL, która zwraca wszystkie kolumny. Ale w zależności od parametru wyniki są różne (w sensie zwracanych wierszy). Potrzebuję dla różnych ustawień wyświetlać tylko niektóre kolumny i w różnej kolejności.

Mógłbym to zrobić na DBGrid, ale wtedy nie mogę zaznaczyć kilku wierszy aby coś z nimi zrobić. (Np. chcę zmienić pole STAUS w wierszu 1, 7, 16, 20).

2
TolkWimasz napisał(a):

Bo to nie zawsze różne zapytania. Mam procedurę SQL, która zwraca wszystkie kolumny. Ale w zależności od parametru wyniki są różne (w sensie zwracanych wierszy). Potrzebuję dla różnych ustawień wyświetlać tylko niektóre kolumny i w różnej kolejności.

Nie dotykaj grida, zmień wartość Field.Visible i dane pole (kolumna) będzie widoczna lub nie.
Widoczność kolumn możesz zapisać jako prosty string z nazwami pól rozdzielnych np. średnikiem. To co będzie na tej liście jest widoczne, pozostałe kolumny będą niewidoczne.
Do tego jedna prosta pętla w DataSet.AfterOpen i po sprawie.

Mógłbym to zrobić na DBGrid, ale wtedy nie mogę zaznaczyć kilku wierszy aby coś z nimi zrobić. (Np. chcę zmienić pole STAUS w wierszu 1, 7, 16, 20).

Przepraszam, nie możesz czy nie wiesz jak to zrobić?
To widziałeś:
http://delphi.about.com/od/usedbvcl/l/aa032503a.htm

0
TolkWimasz napisał(a):

... wyniki są różne (w sensie zwracanych wierszy).
Wierszy czy kolumn ?

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