2016-04-18 15 views
0

Ich habe eine uitableview mit einer Taste, um die Zeile zu löschen. Aber nach dem Löschen der Datenbank Datensatz Ich möchte neu zu laden, aber ich bekomme einen Fehler (System.NullReferenceException). Ich denke, das passiert, weil die Klasse erbt (UITableViewSource) und nicht (UIViewController). Wie löst man das?Loading uitableview

Nachfolgend finden Sie den Klassencode, der für das Laden des uitableview verantwortlich ist.

Vielen Dank

public class FonteTabelaExercicios : UITableViewSource 
{ 
    private ExercicioBanco banco = new ExercicioBanco(); 
    private List<Exercicio> exercicosBanco; 
    private string cellIdentifier = "TableCell"; 
    UIButton btn; 
    private NavController nav = new NavController(); 

    public FonteTabelaExercicios (List<Exercicio> banco) 
    { 
     exercicosBanco = banco; 
    } 

    public override nint RowsInSection (UITableView tableview, nint section) 
    { 
     if (exercicosBanco != null) { 
      return exercicosBanco.Count; 
     } else { 
      return 0; 
     } 
    } 

    public override UITableViewCell GetCell (UITableView tableView, Foundation.NSIndexPath indexPath) 
    { 
     UITableViewCell cell = tableView.DequeueReusableCell (cellIdentifier); 
     if (cell == null) 
      cell = new UITableViewCell (UITableViewCellStyle.Default, cellIdentifier); 

     cell.TextLabel.Text = exercicosBanco [indexPath.Row].Nome + " - " + exercicosBanco [indexPath.Row].Quantidade; 

     btn     = new UIButton (new CGRect (0, 0, 70, 30)); 
     btn.SetTitle("Apagar", UIControlState.Normal); 
     btn.SetTitleColor (UIColor.White,UIControlState.Normal); 
     btn.BackgroundColor = UIColor.Blue; 
     cell.AccessoryView = btn; 

     btn.TouchUpInside += (sender, e) => { 

      int result = 0; 

      UIAlertView alert = new UIAlertView(
       "Confirmação", 
       "Deseja apagar este dado?", 
       null, 
       NSBundle.MainBundle.LocalizedString ("Cancelar", "Cancel"), 
       NSBundle.MainBundle.LocalizedString ("OK", "OK") 
      ); 

      alert.Show(); 
      alert.Clicked += (object sender2, UIButtonEventArgs es) => { 
       if (es.ButtonIndex == 0) 
       { 
        Console.WriteLine("Não"); 
       } 
       else 
       { 
        result = banco.ExecutaDelete(exercicosBanco [indexPath.Row]); 
        if (result > 0) { 
         //Loads listaRecorsViewController with uitableview 
         listaRecorsViewController record = (listaRecorsViewController)nav.Storyboard.InstantiateViewController("listaRecords"); 
         nav.PushViewController(record, false); 
        } 
       } 
      }; 
     }; 

     return cell; 
    } 
} 
+0

Welche Linie bewirkt, dass die Ausnahme bearbeiten? – Giorgi

+0

Möchten Sie dieses Uitableview neu laden oder einen neuen ViewController einfügen? – Sreeraj

Antwort

0

Wenn Sie wollen, ist nur die Uitableview nach dem Löschen th In der Zeile (wie in der Frage erläutert) müssen Sie keinen neuen ViewController instanziieren und erneut zu NavigationController hinzufügen. Es gibt eine ReloadData-Methode in der Klasse UitableviewSource, die die gesamten UITableView-Daten erneut lädt.

Sie können nur die Clicked Ereignishandler wie unten

alert.Clicked += (object sender2, UIButtonEventArgs es) => { if (es.ButtonIndex == 0) { Console.WriteLine("Não"); } 
else { result = banco.ExecutaDelete(exercicosBanco [indexPath.Row]); 
if (result > 0) { 
exercicosBanco.RemoveAt(indexPath.Row); 
ReloadData() ; 
} } }; 
0

Wenn Sie Ihre Quelle erstellen, auf die Tableviewcontroller in einem einen Verweis:

private TableCiewController parent; 
public FonteTabelaExercicios (TableViewController parent, List<Exercicio> banco) 
{ 
    exercicosBanco = banco; 
    this.parent = parent; 
} 

dann, wenn Sie

parent.NavigationController.PushViewController(record,false); 
eine Navigationsoperation durchführen müssen