C # ListView индекс и столбец в строку - PullRequest
2 голосов
/ 13 декабря 2011

У меня есть просмотр списка, который имеет 2 столбца и флажок.

Что я делаю, если флажок установлен, я хочу проверить текст из столбцов 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 ]

1 голос
/ 13 декабря 2011

Вот мое предложение для вас:

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++;
    }
}
0 голосов
/ 13 декабря 2011

Чтобы удалить строки safly, вы можете сохранить имя элемента в массиве, а затем удалить их после того, как пройдете весь список.Это предполагает, что вы используете уникальные имена для каждого из них, если свойство имени вообще не используется, вы можете добавить имя специально для удаления.

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--);
    }              
}  
0 голосов
/ 13 декабря 2011

Я думаю, вам нужно использовать 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 + "'"; 
                } 
            } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...