我有一个包含2列和复选框的列表视图。
我正在做的是如果复选框为true,我想检查第1列和第2列中的文本并使其成为字符串。这就是我所拥有的。
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].Checked == true)
{
listView1.Items.RemoveAt(i);
string sql = "uscolumn = '" + listView1.Items[i].ToString() + "' and ukcolumn = '" + listView1.Items[i].ToString() + "'";
}
}
上面的代码不起作用,但我不确定使用它的方式,.Check按预期工作,但字符串不。
所以在这个例子中:
CheckBox|column1|Column2
True|Fruit|Apples
usColumn = "Fruit"
ulColumn = "Apples"
答案 0 :(得分:1)
以下是我的建议:
int i = 0;
while (i < listView1.Items.Count)
{
if (listView.Items[i].Checked)
{
string sql = "uscolumn = '" + listView1.Items[i].SubItems[0].Text + "' and ukcolumn = '" + listView1.Items[i].SubItems[1].Text + "'";
listView.Items.RemoveAt(i);
}
else
{
i++;
}
}
答案 1 :(得分:0)
我认为您需要使用Items[i].Text
而不是ToString()
:
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].Checked == true)
{
listView1.Items.RemoveAt(i);
string sql = "uscolumn = '" + listView1.Items[i].Text + "' and ukcolumn = '" + listView1.Items[i].Text + "'";
}
}
答案 2 :(得分:0)
要安全地删除行,您可以将项目名称保存在数组中,然后在浏览完整个列表后将其删除。 这假定您为每个名称使用唯一的名称,如果根本不使用名称,则可以添加特定于删除的名称。
List<string> toDelete = new List<int>;
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].Checked == true)
{
toDelete.Add(listView1.Items[0].Name);
string sql = "uscolumn = '" + listView1.Items[i].Text + "' and ukcolumn = '" + listView1.Items[i].Text + "'";`
}
}
foreach(string name in toDelete)
listView1.ItemsRemoveByKey(name);
另一种方法是每次删除时从中删除1。
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].Checked == true)
{
string sql = "uscolumn = '" + listView1.Items[i].Text + "' and ukcolumn = '" + listView1.Items[i].Text + "'";
listView1.Items.RemoveAt(i--);
}
}