【问题标题】:Delete row(s) from grid depending on value with button根据使用按钮的值从网格中删除行
【发布时间】:2012-03-01 14:16:02
【问题描述】:

我需要根据 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

网格面板

 <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) is undefined

【问题讨论】:

    标签: extjs rows ext.net gxt gridpanel


    【解决方案1】:
    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);
                 }
             }
         }
     }
    

    【讨论】:

      【解决方案2】:

      您是否尝试过在商店中使用 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);
                  }
              }
          }
      }
      

      【讨论】:

      • 什么都没有发生...我插入了一些警报语句以查看它停止工作的位置以及变量状态。我在网格中有 15 行:alert(grid.store.getCount()); = 15 我在第一篇文章中添加了img渲染功能。
      • 嗯,好的。那我道歉。我不确定 Sencha 的 ExtJS 实际等同于哪个版本,而且我之前没有尝试过 .NET 包装器。
      猜你喜欢
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 2021-06-23
      • 2012-06-09
      • 1970-01-01
      • 2017-11-20
      • 2018-02-17
      • 2012-06-06
      相关资源
      最近更新 更多