这是一个非常小的问题,但它一直困扰着我。我们来看一个非常简单的例子:
商店:
<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:我不能强调这是对实际问题的非常简化的看法,所以可能会有一些混乱的东西,但我觉得它不太可能。答案 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函数。