我有 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中的新数据。
答案 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
}