如何通过选择C#中的复选框从数据网格视图中删除多行?

时间:2017-08-25 17:06:09

标签: c# button checkbox datagridview delete-row

我有 datagridview 和标题复选框,以检查复选框列中行中的所有复选框(所有复选框的列索引为0)。 我在删除按钮事件中有以下代码:

for (int i = 0; i < datagridview.Rows.Count; i++) {
            if (Convert.ToBoolean(datagridview.Rows[i].Cells[0].Value) == true) {
                datagridview.Rows.RemoveAt(i);
            }
        }

datagridview.rows.count 随着行的删除而不断减少,但我在循环中不断增加。因此,它不是删除所有已检查的行,而是仅删除其中的一些行。当我在代码中增加时,它不会删除带有索引0,1,2等行的数据,而是使用datagridview中的新数据。

2 个答案:

答案 0 :(得分:0)

问题是,通过在删除时不断增加索引,可以跳过列表中的下一项:

<script>
    $(document).ready(function () {
        /*  For Auto Complete */

        var states = new Bloodhound({
            datumTokenizer: Bloodhound.tokenizers.obj.whitespace('state'),
            queryTokenizer: Bloodhound.tokenizers.whitespace,
            remote: {
                url: '/api/statesapi?query=%QUERY',
                wildcard: '%QUERY'
            }
        });

        $('#StateName').typeahead({
                highlight: true
            },
            {
                name: 'states',
                display: 'state',
                source: states,
                limit: 10
            }).bind('typeahead:select',
            function(ev, suggestion) {
                $("#StateId").val(suggestion.id);
            }).bind("change", function(e) {
                var first_suggestion = $(this).parent().find(".tt-suggestion:first-child")
                if(first_suggestion.length!=0)
                    first_suggestion.trigger('click');
                //else
                    // handle invalid input here
            });

        /* ************************** */
    });
</script>
  

在迭代0 ...我们删除索引0上的0: [X] Item 0 1: [X] Item 1 2: [X] Item 2 确定

Item 0
  

在迭代1上...我们删除了索引1上的0: [X] Item 1 1: [X] Item 2 但是我们跳过Item 2现在在索引0上

因此,您应该以相反的顺序迭代列表,当您删除项目时, next 上一项的索引仍然是相同的:

Item 1

答案 1 :(得分:0)

我从查尔斯获得提示之后解决了这个问题,如下所示。谢谢!

public function report_table($data, $header_spacing, $column)
{
ini_set('memory_limit','512M');
//then your loop
}