2012-03-01 47 views
1

我需要根據columnStatus的值刪除一些行。我試了一下代碼,但沒有任何反應。從網格中刪除行取決於按鈕的值

例如,我有6行的值(1,1,3,2,4,3),我想刪除狀態爲2,3和4的行,導致只剩下兩行,第1行和第2.

 ID Status 
Row 1 1  1 
Row 2 2  1 
Row 3 3  3 
Row 4 4  2 
Row 5 5  4 
Row 6 6  3 

的GridPanel

<ext:GridPanel ID="grid" runat="server" Title= 「" AutoWidth="true" AutoHeight="true" 
    Padding="4" StripeRows="true" Draggable="false" Selectable="true" Icon="Application"> 
    <Store> 
     <ext:Store ID="Store1" runat="server"> 
      <Reader> 
       <ext:ArrayReader> 
        <Fields> 
         <ext:RecordField Name=" personID " Mapping="PersonsId"/> 
         <ext:RecordField Name="description" Mapping="Description " /> 
        </Fields> 
       </ext:ArrayReader> 
      </Reader> 
     </ext:Store> 
    </Store> 
    <ColumnModel ID="ColumnModel1" runat="server"> 
     <Columns> 
      <ext:Column DataIndex="personID" Header="ID" Width="100"> 
      </ext:Column> 
      <ext:Column ColumnID="columnStatus" DataIndex=" description " Header="Status" Width="130"> 
       <Renderer Handler="return imgRenderer(value);" /> 
      </ext:Column> 
     </Columns> 
    </ColumnModel> 
    <SelectionModel> 
     <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" SingleSelect="false"/> 
    </SelectionModel> 
</ext:GridPanel> 

刪除按鈕:

<ext:Panel runat="server" ID="panel" Height="0"> 
    <TopBar> 
     <ext:Toolbar runat="server"> 
      <Items> 
       <ext:Button ID="btnClearSelection" runat="server" Text="Delete" OnDirectClick="btnClearSelection_Clicked" Icon="Delete"> 
        <Listeners> 
         <Click Handler="Delete(#{grid});" /> 
        </Listeners> 
       </ext:Button> 
      </Items> 
     </ext:Toolbar> 
    </TopBar> 
</ext:Panel> 

刪除功能:

function Delete(grid) { 

     alert("testing button clicked"); 

     for (var i = 0; i < grid.store.totalLength; i++) { 
      var status = grid.store.getAt(i).data["columnStatus"]; 
      if (status == "2"){ 
       grid.getSelectionModel().selectRow(i ,true); 
      } 
      grid.deleteSelected(); 
     } 

    } 

這裏是imgrender功能的情況下,它相關的問題:

function imgRenderer(value) { 
     if (value == "1") { 
      return value + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" 
      + "<img src='/img/flag_green.png' id='1' class='Icon' />"; 
     } 
     else if (value == "2") { 
      return value + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" 
      + "<img src='/img/flag_red.png' id='2' class='Icon' />"; 
     } 
     else if (value == "3") { 
      return value + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" 
      + "<img src='/img/flag_orange.png' id='3' class='Icon'/>"; 
     } 

     else if (value == "4") { 
      return value + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" 
      + "<img src='/img/flag_green.png' id='4' class='Icon' />"; 
     } 
    } 

編輯:我跑了它使用Firebug我得到一個錯誤:grid.store.getAt(i)是未定義

回答

2
function Delete(grid) { 
    var i = 0; 
    if (grid.store.getCount() > 0) { 
     for (i = grid.store.getCount() - 1; i >= 0; i--) { 
      var status = grid.store.getAt(i).data["description"]; 
      if (status == "2" || status == "3" || status == "4") { 
       grid.store.removeAt(i); 
      } 
     } 
    } 
} 
1

您是否試過在商店中使用removeAt()方法?

function Delete(grid) { 

    alert("testing button clicked"); 

    if (grid.store.count() > 0) { 
     for (var i = grid.store.count(); i >= 0; i--) { 
      var status = grid.store.getAt(i).data["columnStatus"]; 
      if (status == "2"){ 
       grid.store.removeAt(i); 
      } 
     } 
    } 
} 
+0

什麼也沒有發生...... 我插入一些警告語句,看看它停止工作,它的變量狀態。我在網格中有15行:alert(grid.store.getCount()); = 15 我已將img渲染函數添加到第一篇文章。 – Danny 2012-03-02 10:29:39

+0

這是什麼版本的Ext? – 2012-03-02 15:22:52

+0

該版本是Ext.NET 1.X – Danny 2012-03-05 09:01:27