2013-04-26 2 views
0

Привет У меня проблема с выравниванием данных в столбце искрового datagrid после рендеринга. Все заголовки выровнены влево, однако я бы хотел сделать следующее: 1. Сопоставьте название заголовка столбца. 2. Совместите текст вправо. 3.Займите первый столбец, чтобы при горизонтальном прокрутке первый столбец не должен двигаться горизонтально.Невозможно выровнять данные в Datagrid

Любая помощь в этом отношении была бы очень признательна.

Спасибо и привет

<?xml version="1.0" encoding="utf-8"?> 
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" 
        clipAndEnableScrolling="true"> 

    <fx:Script> 
     <![CDATA[ 
      import flashx.textLayout.formats.BackgroundColor; 

      import mx.controls.Alert; 
      import mx.states.SetStyle; 

      private const POSITIVE_COLOR:uint = 0x000000; // Black 
      private const NEGATIVE_COLOR:uint = 0xFF0000; // Red 

      override public function prepare(hasBeenRecycled:Boolean):void { 

       if (this.data) { 
        if (column.labelFunction != null) { 
         lblData.text = column.labelFunction(data, column); 

         setStyle("color", (parseInt(this.data.st1) < 0) ? NEGATIVE_COLOR : POSITIVE_COLOR); 

        } else { 
         lblData.text = data[column.dataField]; 
        } 
       } 
      } 
     ]]> 
    </fx:Script> 

    <s:Label id="lblData" top="9" left="7" textAlign="right"/> 

</s:GridItemRenderer> 

ответ

2

2/Выровнять текст вправо.

Начну с самого простого.
В вашем специализированном рендерере элементов вы по-прежнему выравниваете влево (left="7"). У вас есть два варианта, чтобы исправить это:

<s:Label id="lblData" top="9" right="7"/> 

будет откалибровать этикетки вправо и привести текст переполнение в левой

<s:Label id="lblData" top="9" left="7" right="7" textAlign="right"/> 

сделает Ярлык принять все доступное пространство, откалибровать текст справа и усечь текст, если он слишком большой

1/Среднее название заголовка столбца.

Я думаю, что единственный способ - создать собственный headerRenderer.

  • копия весь DefaultGridHeaderRenderer
  • найти ярлык с идентификатором "labelDisplay"
  • изменить его textAlign свойство к center
  • назначить пользовательские headerRenderer:
    <s:GridColumn headerRenderer="path.to.CenteredHeaderRenderer"/>

3/Заморозить первый столбец, чтобы при значении id o горизонтальная прокрутка, первая колонка не должна перемещаться горизонтально.

Боюсь, что это потребует серьезного взлома.Если вы не хотите, чтобы нырнуть и создать пользовательский элемент управления DataGrid, я думаю, вам лучше всего, чтобы подделать:

  • создать список для представления фиксированного столбца
  • создать DataGrid, чтобы представлять другие столбцы
  • выключает вертикальную полосу прокрутки Листа: вы хотите проверочной прокрутку сетки
  • связать свою вертикальную позицию прокрутки: когда DataGrid вертикально прокручивать, список должен следовать, и наоборот
  • связывают их отдельные элементы
  • сделать некоторые шкуры, чтобы сделать его похожим на один DataGrid
+1

Моя одна вещь, чтобы добавить, что оригинальный MX DataGrid имеет свойство lockedColumnCount, которые могут быть использованы для замораживания колонки: HTTP: //help.adobe. com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/dataGridClasses/DataGridBase.html # lockedColumnCount. Если это важно, переключиться обратно на компонент MX может быть проще, чем пытаться сделать обходные пути. – JeffryHouser

+0

@ www.Flextras.com Спасибо. Не знал об этом. Не много работы в Flex 3. Кажется, есть кое-какие вещи, которые я пропустил. – RIAstar

+0

тоже заблокированRowCount, если вы хотите заблокировать строки. Оба они являются «пуленепробиваемыми», как MX DataGrid, за все, что стоит. – JeffryHouser

Смежные вопросы