2013-10-07 3 views
1

Flex 4 Help Мне нужен itemRenderer для setStyle шрифтаWeight всей строки datagrid, выделенной жирным шрифтом, на основе содержимого ячейки любой ячейки в этой строке. Так, например, если содержимое ячейки в моем полном datagrid равно строке «ВСЕ», я хочу, чтобы вся целая строка, у которой эта ячейка в datagrid была «жирной». Примечание. Это не данные XML.Flex itemRenderer для полужирного размещения динамически на основе содержимого ячейки

Render 

protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { 
      super.updateDisplayList(unscaledWidth,unscaledHeight); 
      if (data.toString() == "ALL"){ 
       setStyle("fontWeight","bold"); 
      }else{ 
       setStyle("fontWeight","normal"); 
      } 

     } 

MXML Code 
<mx:VBox width="100%" id="statsGridBox" height="40%" > 
<mx:DataGrid id="statsGrid" width="100%" height="100%" itemRenderer="com.jpmc.ctrbs.dashboard.alarms.renderers.FontWeightRowRender"/> 
</mx:VBox> 

ответ

0

Ответ от StephenNYC работал, однако в конце я подумал, что было легче для ситуации, в которой я был, использовать mx: AdvancedDataGrid и применить styleFunction = "myStyleFunc" для изменения fontWeight.

MXML

<mx:AdvancedDataGrid id="statsGrid" width="100%" height="100%" styleFunction="myStyleFunc" /> 

сценарий

<fx:Script> 
<![CDATA[ 
private function myStyleFunc(data:Object,col:AdvancedDataGridColumn):Object { 
       if(data) { 
        for(var propertyName : * in data){ 
         if (data[propertyName] == "ALL") { 
          return {fontWeight:"bold"}; 
         } 
        } 
       } 
       return {fontWeight:"normal"};  
      } 
     ]]> 
    </fx:Script> 
+0

, приняв ваш собственный ответ, несмотря на то, что это ответ на вопрос об ошибке из исходного вопроса, несмотря на то, что есть правильные ответы других, несмотря на признание того, что решение, данное вам на самом деле, работает, оно не побуждает меня/других предлагать какую-либо помощь , Скорее всего, вы будете много отвечать на ваши вопросы в будущем. – StephenNYC

1

Yyou должен поместить ваш setStyle код в [overriden] установить метод данных вашего средства визуализации ячеек. Затем стиль устанавливается, когда данные изменяются, а не когда рендеринг перерисовывается (что может не произойти при изменении данных, как вы это испытываете).

В рендера:

override public function set data(value:Object):void 
{ 
    super.data = value; 
    if (data && data.toString()=="ALL") 
     setStyle("fontWeight","bold"); 
    else 
     setStyle("fontWeight","normal"); 
} 
+0

К сожалению, я должен был указано, что защищенная функция переопределения работает. Проблема в том, что он меняет весь шрифт myWithGold жирным шрифтом. Мне просто нужно изменить одну строку, у которой есть ячейка со строкой «ALL», выделенной жирным шрифтом, а не весь dataGrid. – Dye

2

первую очередь, если вы хотите, чтобы выделить произойти только на клеточном уровне, поместите код внутри itemrender «FontWeightRowRender».

В видеообработки, вы можете сделать что-то вроде:

  override public function set data(value:Object):void {    
      super.data = value; 

      if (String(value) == "ALL") { 
       boldText.visible = true; 
       normalText.visible = false;     
      } else { 
       boldText.visible = false; 
       normalText.visible = true; 
      } 
     } 

И

<s:Group>  
    <s:Label id="boldText" text="{label}" width="100%" fontWeight="bold"/> 
    <s:Label id="normalText" text="{label}" width="100%" fontWeight="normal"/> 
</s:Group> 

Обновлено: пример выделения строки

  override public function set data(value:Object):void {    
      super.data = value; 
          if (!value) return;    

      if (MyValueObject(value).isBoldRow()) { 
       boldText.visible = true; 
       normalText.visible = false;     
      } else { 
       boldText.visible = false; 
       normalText.visible = true; 
      } 
     } 

MyValueObject.as

 public function isBoldRow():Boolean { 
      if ((this.attrib1 == "ALL") || (this.attrib7 === "ALL")) 
      return true; 
      return false; 
     } 
+0

Мне нужно, чтобы подсветка выполнялась на уровне строк, основываясь на содержании данных любой конкретной ячейки в этой строке. Таким образом, в конечном итоге у меня есть dataGrid, который имеет 7 столбцов, и строки заполняются динамически, исходя из того, сколько раз срабатывает несколько аварийных сигналов в диапазоне дат. В конце каждого дня в диапазоне дат в таблице данных тревоги в строке содержится строка «ВСЕ», а остальные строки - итоговые значения для этого дня. Мне нужно это и любая строка, у которой есть эта строка «ALL» в этом поле тревоги (которое на самом деле является MODEL_NAME для моей базы данных), чтобы быть жирным. – Dye

+0

, так что вы говорите, что если какая-либо ячейка в этой строке содержит «ВСЕ», вся строка должна быть выделена полужирным шрифтом? если это так, вы можете использовать один и тот же код элемента и добавить функцию удобства в свой объект значения, например «isBoldRow()» (boolean), и использовать эту функцию в условии IF в «set data()». isBoldRow будет в основном содержать код, чтобы решить, должна ли строка быть выделена. – StephenNYC

+0

Да, да точно. Я попробую, спасибо! – Dye

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