ExtJS 3.4 / Ext.NET:使用Ext.data.Record.set('field',value)不会在网格上反映更改

时间:2013-10-21 16:55:36

标签: extjs ext.net

这是一个非常小的问题,但它一直困扰着我。我们来看一个非常简单的例子:

商店:

<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:我不能强调这是对实际问题的非常简化的看法,所以可能会有一些混乱的东西,但我觉得它不太可能。

1 个答案:

答案 0 :(得分: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();
}

和codebehind

protected void Load_Grid_Data (){//load grid}

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