Как получить checkeditems в listview в C #?

#c# #listview

#c# #listview

Вопрос:

У меня есть представление списка, и пользователь может проверять несколько элементов в listview, и код будет сравнивать значения, проверенные в listview, со значениями в таблице в базе данных MS Access. Проблема в том, что если значение, которое проверяется пользователем, равно X, оно будет преобразовано в {Text=»X»} и сравните это со значением в базе данных, что неверно. У кого-нибудь есть представление о том, что происходит? Вот как я получаю проверенные элементы:

 foreach (Listview module in listView1.CheckedItems)
{
    if(module.ToString() == Convert.ToString((test.Tables["objects"].Rows[i]["objectname"])))
}
 

Просто кратко объясните, как я добавил элементы в listview:
У меня есть таблица в моей базе данных, элементы в представлении списка взяты из одного из столбцов этой таблицы. но мне нужно, чтобы моя таблица была отсортирована на основе, например, столбца [1], а затем экспортировала значения в столбце [2] в представление списка. Я также сгруппировал элементы в три группы.

 ListViewGroup Small_Modules = new ListViewGroup("Small Modules", HorizontalAlignment.Left);
        ListViewGroup Medium_Modules = new ListViewGroup("Midum Modules", HorizontalAlignment.Left);
        ListViewGroup Heavy_Modules = new ListViewGroup("Heavy Modules", HorizontalAlignment.Left);
        //find the maximum moment in the column
        //this maximum basically does nothing and it was just for future refrencess 
        double max_moment = 0;
        int i = 0, j = 0;
        foreach (DataRow item in test.Tables["objects"].Rows)
        {
            //i is defined to count the number of modules in the table
            i  ;
            //Proj_ID is a user input through a textbox
            if (proj_ID == Convert.ToInt32(item["projID"]))
            {
                if (max_moment < Convert.ToDouble(item["moment"]))
                {
                    max_moment = Convert.ToDouble(item["moment"]);
                }
            }
        }
        //sort the table based on the moment in an ascending order
        DataView dv = test.Tables["objects"].DefaultView;
        dv.Sort = "moment ASC";
        DataTable sorted_dt = dv.ToTable();

        //define each group members
        foreach (DataRow row in sorted_dt.Rows)
        {
            //First one third of the items goes into group one 
            //Second one third of the items goes into group two
            //last one third of the items goes into group three
            j  ;
            //Proj_ID is a user input through a textbox
            if (proj_ID == Convert.ToInt32(row["projID"]))
            {
                if (j <= i / 3)
                {
                    listView1.Items.Add(new ListViewItem(Convert.ToString(row["objectname"]), Small_Modules));
                }
                else if (j <= i * 2 / 3 amp;amp;  j > i / 3)
                {
                    listView1.Items.Add(new ListViewItem(Convert.ToString(row["objectname"]), Medium_Modules));
                }
                else if (j > i * 2 / 3)
                {
                    listView1.Items.Add(new ListViewItem(Convert.ToString(row["objectname"]), Heavy_Modules));
                }
            }
        }
        listView1.Groups.Add(Small_Modules);
        listView1.Groups.Add(Medium_Modules);
        listView1.Groups.Add(Heavy_Modules);
 

Я использую C # WFA
Моя база данных — MS Access

Комментарии:

1. Как вы добавляете элементы в listview? Можете ли вы поделиться этим кодом? Listview module должно быть изменено на ListviewItem module

2. Это была опечатка, да, я использую ListViewItem. Конечно, я обновлю свой вопрос

Ответ №1:

Хорошо, я удивлен, что никто не знает ответа на этот вопрос. Я мог бы найти ответ, отлаживая код построчно и проверяя, что происходит за сценой.

При использовании listview элементы будут сохранены как {Text = «X»}, в то время как в представлении списка у нас есть только X. Чтобы получить доступ к X в моем вопросе, мне пришлось использовать module .Текст вместо только модуля.

 foreach (Listview module in listView1.CheckedItems)
{
    if(module.Text.ToString() == Convert.ToString((test.Tables["objects"].Rows[i]["objectname"])))
}