1

这是一个很小的问题,但它一直困扰着我一段时间。让我们来看一个非常简化的例子:

店铺:

<ext:Store ID="myStore" runat="server" UseIdConfirmation="true">
    <Reader>
        <ext:JsonReader IDProperty="fieldId">
            <Fields>
                <ext:RecordField Name="myField" Type="String" />
            </Fields>
        </ext:JsonReader>
    </Reader>
</ext:Store>

网格:

<ext:GridPanel ID="myGrid" runat="server" StoreID="myStore Width="200">
    <ColumnModel>
        <Columns>
            <ext:Column ColumnID="myField" Header='My Field'                                   DataIndex="myField" AutoDataBind="true" Width="180" />
        </Columns>
    </ColumnModel>
    <SelectionModel>
        <ext:RowSelectionModel ID="RowSelectionModel2" runat="server" MoveEditorOnEnter="false" SingleSelect="true" />
    </SelectionModel>
</ext:GridPanel>

为简单起见,假设我在网格中的按钮侦听器中有以下内容:

<Click Handler="changeRowValue(rowIndex, myGrid)" />

Javascript 片段:

var newValue = 'foo';

var changeRowValue = function(rowIndex, grd){
    var store = grd.getStore();
    store.getAt(rowIndex).set('myField', newValue);
}

这样,存储值会更新,但不会在网格中显示“foo”。

我知道一个简单的

grd.view.refresh()

将更新网格,但它会清除“污垢”,我希望它变脏(听起来很讨厌)给用户反馈该值尚未提交(你知道,右上角的红色小箭头角落)。

这在任何程度上都不是什么大问题,我知道它可以完成,因为我以前做过(我只是不记得在哪里或如何),所以这里有什么问题?

PS:我不能过分强调这是对实际问题的非常简化的看法,因此可能中间会有一些东西把事情搞砸,但我发现这不太可能。

4

1 回答 1

0

尝试使用,myStore.reload(); 函数,确保你在商店中声明“onRead”函数重新加载网格数据

[

<ext:Store ID="myStore" runat="server" UseIdConfirmation="true" onRead="Load_Grid_Data">
    <Reader>
        <ext:JsonReader IDProperty="fieldId">
            <Fields>
                <ext:RecordField Name="myField" Type="String" />
            </Fields>
        </ext:JsonReader>
    </Reader>
</ext:Store>


var newValue = 'foo';

var changeRowValue = function(rowIndex, grd){
    var store = grd.getStore();
    store.getAt(rowIndex).set('myField', newValue);
    store .reload();
}

和代码隐藏

protected void Load_Grid_Data (){//load grid}

] 每当你调用 reload 函数时,它都会触发 onread 函数。

于 2013-11-06T20:38:25.260 回答