C#ListView索引和列到字符串

时间:2011-12-13 15:12:11

标签: c# winforms listview

我有一个包含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"

3 个答案:

答案 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--);
    }              
}