2013-10-21 74 views
1

這是一個非常小的問題,但它一直在困擾着我。讓我們用一個很簡單的例子:ExtJS 3.4/Ext.NET:Ext.data.Record.set('field',value)不會在網格上反映更改

商店:

<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

我無法重現該問題。這是我測試的完整aspx頁面:http://pastebin.com/A6rRhKs6也許,你只是錯過了商店裏的'update'事件。你有沒有嘗試用'beginEdit'和'endEdit'封裝'set'? – astrada

回答

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} 

] 每當你調用重載函數時,它都會觸發onread函數。