2016-08-25 4 views
-2

Я использую следующий код, чтобы получить и элемент (билет) из списка и удалить в соответствии с номером счета-фактуры. но он удаляет первый элемент в списке.Не удается удалить указанный элемент

private void btnTktDelete_Click(object sender, EventArgs e) 
    { 
     uOp = true; 
     if (MainListBox.SelectedIndex != -1) 
     { 
      Ticket tkt = (Ticket)MainListBox.SelectedItem;  

      List<Ticket> tlist = GetList<Ticket>(tklp); 
      Ticket TheTicket = tlist.Find(x => x.InvoiceNumber == tkt.InvoiceNumber); 
      List<Transaction> tranlist = GetList<Transaction>(trlp); 


      if (TheTicket != null) 
      { 
       Int32 number = TheTicket.InvoiceNumber; 
       tlist.RemoveAll(x=>x.InvoiceNumber == number); 
       tranlist.RemoveAll(x => x.InvoiceNumber == number); 
       SaveList(trlp, tranlist); 
       SaveList(tklp, tlist); 
      } 

     // MainListBox.DataSource = null; 
     // MainListBox.DataSource = GetList<Ticket>(tklp); 
     // dgvExport.DataSource = null; 
     // dgvExport.DataSource = GetList<Ticket>(tklp); 

      uOp = false; 

     } 
    } 
+1

Только вы можете отладить это, поставить точку останова и контролировать данные в переменных. – Shaharyar

ответ

0

Ваш код предполагает, что несколько билетов могут иметь одинаковый номер счета-фактуры. это не кажется мне интуитивным - должно быть уникальным. самый простой способ получить список - сохранить ссылку на него в поле.

List<Ticket> allTickets = ... 

private void btnTktDelete_Click(object sender, EventArgs e) 
{ 
    Ticket ticketToRemove = (Ticket)MainListBox.SelectedItem; // need cast? 
    allTickets.Remove(ticketToRemove); 
    // save... 
} 
Смежные вопросы