Datasourceのデータを使用する
必要なコーディング
アタッチされたDatasetに格納されている情報を利用しますが、基本的に以下を行う必要があります。
- 情報が有効かどうか、プロパティをチェックする
- データセットを繰り返し処理する
- チャートに表示されるデータ配列を構築する
このコードを、前回の記事のdumpContents()メソッドの先頭付近で、データの代入の直後に追加します。すると、以下のようになります。
function dumpContents() { //Get the data to use $data = $this->_data; //If datasource is correctly assigned, we will use that data //instead the Data property //On design time, we don't have access to datasource objects, //so nothing to do if(($this->ControlState & csDesigning) != csDesigning) { //First, check if there is some value on the column properties if(($this->_labelscolumn != '') && ($this->_valuescolumn != '')) { //If there is a valid dataset attached if(($this->_datasource != null) && ($this->_datasource->Dataset != null)) { $ds = $this->_datasource->Dataset; //If dataset is active if($ds->Active) { $data=array(); //Iterate $ds->first(); while(!$ds->EOF) { //Add the item to the array $data[$ds->fieldget($this->_labelscolumn)] =$ds->fieldget($this->_valuescolumn); $ds->next(); } } } } } }
作成したコードの解説
コードを見てみましょう。まず、IDEの中か否かをチェックする必要があります。IDEの中では現在のコンポーネント以外のオブジェクトは利用できません。Datasourceへの参照がないので行うことは何もありませんが、実行時にはカラムプロパティに何らかの値があるかチェックする必要があります。最後に、Datasourceがアタッチされていて、そのDatasourceにDatasetがアタッチされていることを確認します。
これらすべての条件が揃えば、Datasetをオープンして作業を行えます。そして、データセットを繰り返し処理します。基本的なメソッドはfirst()とnext()で、データセットが最後の行に来た時にEOFがtrueを返します。
この処理の中における重要な行は、以下の行です。
$data[$ds->fieldget($this->_labelscolumn)] =$ds->fieldget($this->_valuescolumn);
この行では、$data配列に新たな要素を追加しています。そのキーは、LabelsColumnプロパティによって参照されるフィールドの値で、その要素の値は、ValuesColumnプロパティによって参照されるフィールドの値です。
完成です! データベースからの情報をチャートに収集するのに、もう何もすることはありません。