Coś Ty tu nakombinował. Macie te ORMy, a potem prostego SQLa nie potraficie zapisać ;)
Po co Ci ten LIKE w zapytaniu? Wiesz co robi? LIKE używa się do porównania łańcuchów po jakimś wzorcu z symbolami wieloznacznymi, np:
SELECT ID FROM tbl WHERE clientName LIKE '%-%'
Takie zapytanie zwróci ID wszystkich klientów, którzy mają myślnik w nazwisku (pole clientName). Więc można stwierdzić, że tych, którzy mają dwuczłonowe nazwiska
Twoje zapytanie jest zupełnie bez sensu, bo sprowadza się do:
SELECT 1 FROM MyTable
Poprawnie to powinieneś zrobić to w ten sposób:
- Stworzyć sobie klasę dla rekordu, który wrzucasz do ListwView.
- Ta klasa powinna mieć pola analogiczne do tego, co masz w tabeli
- Następnie tworzysz sobie obiekt tej klasy, zaczytując odpowiedni rekord z bazy
- Potem, podczas wyświetlania tego w ListView, sprawdzasz, czy obiekt ma pole CzyZakonczone ustawione na true.
Np:
public class ReminderItem
{
public UInt64 ID { get; private set; }
public DateTime DateTime { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool Finished { get; set; }
public ReminderItem(DataRow dr)
{
ID = Convert.ToUInt64(dr["id"]);
DateTime = Convert.ToDateTime(dr["dt"]); //linijka została uproszczona i normalnie nie powinieneś tak robić
Name = dr["name"].ToString();
Description = dr["description"].ToString();
Finished = Convert.ToBoolean(dr["finished"]); //to Twoje CzyZakonczono
}
}
To jest bardzo uproszczony przykład Twojej klasy. Nie musisz też trzymać oddzielnie daty i czasu. Możesz trzymać to w jednym polu (tak jak ja to zrobiłem). Dodatkowo uwielbiam trzymać daty w bazie danych w postaci sekund (tak przy okazji).
Dla czepialskich: specjalnie nie robię żadnego dziedziczenia i klas bazowych w stylu BaseDBItem, żeby nie zaciemniać obrazu.
Potem bardzo ładnie wrzucasz to sobie na listę:
List<ReminderItem> items = GetItems(); //pobierasz sobie listę tych itemów (oczywiście jeden SQL)
foreach(RemiderItem item in items)
{
ListViewItem listitem = new ListViewItem(item.Name);
listitem.SubItems.Add(item.DateTime.ToString());
listitem.SubItems.Add(item.Description);
if(item.Finished)
listitem.ImageIndex = 1;
else
listitem.ImageIndex = 0;
//i teraz magia:
listitem.Tag = item; //dzięki temu w tagu listitem masz zawsze dostęp do oryginalnego itema
listViewForm2.Items.Add(listitem);
}
Dzięki instrukcji: listitem.Tag = item zawsze masz dostęp do itema klasy RemiderItem z poziomu ListViewItem. Rozumiesz? Czyli jeśli np. w jakimś zdarzeniu ListView będziesz chciał sprawdzić, czy item.Finished to musisz tylko dobrać się do ListViewItem tego, który Cię interesuje, a potem:
ListViewItem lvi = GetClickedListViewItem(); //to oczywiście pewnie będziesz miał w argumencie zdarzenia
ReminderItem item = lvi.Tag as ReminderItem;
if(item.Finished) ....
Mam nadzieję, że nie zamotałem Ci za mocno i widzisz jak to się robi.