在Flex中如何刷新datagrid上的dataprovider

时间:2014-01-31 11:50:38

标签: flex

请帮帮我......

我有一个简单的DataGrid,dataprovider是一个服务“getServiceDatiResult.lastResult”,这个服务来自webmethod aspnet,它返回一个sqlserver数据。 我通过click_button创建了Event,它插入数据并将数据导入Datagrid .... 问题是数据网格。它只在我多次调用按钮事件时刷新数据..

我试过了:

datagrid.refresh();

datagrid1.columns.clear();
datagrid1.columns.refresh();

getServiceDatiResult.lastResult.refresh();
getServiceDatiResult.lastResult.commit();

代码:

<mx:DataGrid id="datagrid1" creationComplete="datagrid1_creationCompleteHandler(event)"
             dataProvider="{getServiceDatiResult.lastResult}" dropShadowVisible="true"
             fontSize="12" fontWeight="normal" textAlign="center" verticalAlign="middle" editable="true">

<s:Button id="button3"  label="Insdata3_now" click="button3_clickHandler(event)"/>


[Bindable]
protected function button3_clickHandler(event:MouseEvent):void
{
    getServiceDatiResult.token = service.getServiceDati();

        <!-- regresh ???? -->           
    getServiceDatiResult.lastResult.commit();
    getServiceDatiResult.lastResult.refresh();
}

5 个答案:

答案 0 :(得分:7)

您想要刷新DataGrid的数据提供者;这反过来将更新DataGrid。

假设您有一个ArrayCollection,您可以使用refresh()方法刷新所有项目:

(datagrid.dataProvider as ArrayCollection).refresh();

如果您只刷新单个项目,则可以通过使用itemUpdated()更新单个项目来节省一些处理时间:

(datagrid.dataProvider as ArrayCollection).itemUpdated(item);

MX DataGrid将获取任何对象并尝试在DataGrid中显示它,因此如果您从服务器返回一个Array或XML,则可能必须替换dataProvider:

datagrid.dataProvider = newDataProvider;

答案 1 :(得分:0)

我同意Reboogs解决方案。另一种方法是执行,dataGrid.invalidatelist(),dataprovider.refresh()相比,这有点重,因为无效将重新加载并重新绘制UI。

答案 2 :(得分:0)

我认为如果您正确地调用此请求,则根本不需要刷新!对我来说,看起来你正在调用一些异步请求,但也许你认为它是同步操作。我认为是因为处理程序方法中的[Bindable]标签,你为什么要在那里?

但是我认为你认为你没有给我们所有的信息。例如 - 在哪里设置变量getServiceDatiResult?你在里面设置了一些令牌,但设置lastResult的内容和位置是什么?

我重复我认为只是为了调用简单的请求,没有必要刷新任何东西,问题出在其他地方 - 处理请求itsef。

答案 3 :(得分:0)

(datagrid.dataProvider as ArrayCollection).refresh();当你使用像dataprovider这样的数组时方法是有效的...在我的情况下,问题是点击按钮(事件)调用3个服务获得更新3个不同的数据网格...所以我有3个响应者在3上通过aspNet选择到SqlServer。 .. sincronize所有的操作都是为了...我的临时个人解决方案是修改Sql表并通过点击按钮(事件)减少操作..这样数据网格更新完美......但我正在研究一种新的解决方案..谢谢求你帮忙......

答案 4 :(得分:0)

只需刷新您的数据提供者,如下所示

var datapro:ArrayCollection = new ArrayCollection();
//

function dataRefresh():void
{
  datapro.refresh();
}

//
//
<mx:DataGrid id="datagrid1"  creationComplete="datagrid1_creationCompleteHandler(event)" dataProvider="{datapro}">
//
//