【问题标题】:Flex: Delete item from collection bound to datagrid and update the grid selected indexFlex:从绑定到数据网格的集合中删除项目并更新网格选定索引
【发布时间】:2011-02-20 14:04:09
【问题描述】:

我有一个绑定了 xmlListCollection 的数据网格:

<mx:DataGrid id="dgCompetente" includeIn="Competente" x="10" y="66" width="547" height="468"
                 change="dgCompetente_changeHandler(event)" dataProvider="{colCompetente}"
                 editable="false">
        <mx:columns>
            <mx:DataGridColumn headerText="ID Competenţă" dataField="idCompetenta"/>
            <mx:DataGridColumn headerText="Denumire Competenţă" dataField="denCompetenta"/>
            <mx:DataGridColumn headerText="Competenţă Superioară" dataField="idCompSuperioara" labelFunction="labelFunctionCompetentaSuperioara"/>
        </mx:columns>
    </mx:DataGrid>

还有一个用于删除数据网格中当前选中项的按钮,该按钮具有分配给单击事件的此功能:

<s:Button id="btnDeleteCompetenta" includeIn="Competente" x="813" y="65" label="Stergere" click="deleteCompetenta()"/>


private function deleteCompetenta():void 
{
    try {
        var position:int = dgCompetente.selectedIndex;

        if (position >= 0) {
            colCompetente.removeItemAt(position);
            dgCompetente.selectedIndex = position;
        }

        clearEdit(fieldsCompetente);
        saveCompetente();
    } catch (error:Error) {
        errorHandler.defaultErrorHandler(error);
    }
}

我希望 selectedIndex 保持不变。因此,如果我删除第 2 项,则应选择列表中的下一项。问题是如果我删除第 2 项,第 3 项将被选中,我不知道为什么。

谁能告诉我我错过了什么?

谢谢!

【问题讨论】:

    标签: apache-flex collections datagrid


    【解决方案1】:

    它不起作用 selectedIndex 在 updateCompleteHandler 中也没有更新好值 但是value-1如果强制value+1,取value+2,并且选择从click中逃逸,所以完全一样。

    【讨论】:

      【解决方案2】:

      您可能在更新 DataGrid 之前过早地重置了 selectedIndex,但由于您的代码调用了一堆函数,因此很难准确判断。试试这个

      添加一个“缓存位置”变量,如下所示:

      protected var cachedPosition : int;
      

      然后修改你的 deleteCompetenta 方法

      private function deleteCompetenta():void 
      {
          try {
              cachedPosition = dgCompetente.selectedIndex;
      
              if (position >= 0) {
                  colCompetente.removeItemAt(position);
      //            don't reset this here
      //            dgCompetente.selectedIndex = position;
              }
      
              clearEdit(fieldsCompetente);
              saveCompetente();
          } catch (error:Error) {
              errorHandler.defaultErrorHandler(error);
          }
      }
      

      然后在 DataGrid 中添加一个 updateCompleteHander:

      <mx:DataGrid id="dgCompetente" includeIn="Competente" x="10" y="66" width="547" height="468"
                       change="dgCompetente_changeHandler(event)" dataProvider="{colCompetente}"
                       editable="false" updateComplete="updateCompleteHandler(event)">
      

      并在 updateCompleteHandler 中重置 selectedIndex:

      protected function updateCompleteHandler(event:Event):void{
      // reset here
       dgCompetente.selectedIndex = cachedPosition;
      }
      

      这样可以解决吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-04
        • 2015-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        相关资源
        最近更新 更多