2017-10-04 3 views
1

Ich erstelle eine App, bei der der Benutzer die Client-Informationen eingeben muss. Diese Informationen werden an die nächste Seite gesendet und in einem Tabellenformat angezeigt. Ich kann die Werte einfügen, aber nicht im Tabellenformat abrufen. Bitte helfen Sie.Xamarin IOS SQLite

private string pathtoDatabase; 
    public RoofExisting(IntPtr handle) : base(handle) 
    { 
     var documentFolder = Environment.GetFolderPath(Environment.SpecialFolder.Personal); 
     pathtoDatabase = Path.Combine(documentFolder, "ClientInfo_db.db"); 

     using (var connection = new SQLiteConnection(pathtoDatabase)) 
     { 
      var con = connection.Table<ClientInfo>(); 
      foreach (var item in con) 
      { 
       ClientInfo Info = new ClientInfo(item.projectno, item.ClientName, item.CCompany, item.Caddress, item.CPostal, item.CPhonen, item.CEmail); 

       //Adding in the table view 
       CNinfo.Source = new TableSource(Info, this); 
      } 
     } 
    } 

class TableSource:UITableViewSource 
{ 
    protected string[] tableItems; 
    protected String cellidentifier = "TableCell"; 
    ViewController owner; 
    private ClientInfo info; 
    private RoofExisting roofExisting; 

    public TableSource(String[] items, ViewController owner) 
    { 
     tableItems = items; 
     this.owner = owner; 
    } 

    public TableSource(ClientInfo info, RoofExisting roofExisting) 
    { 
     this.info = info; 
     this.roofExisting = roofExisting; 
    } 

    public override nint RowsInSection(UITableView tableview, nint section) 
    { 
     return tableItems.Length; 
    } 
    public override void RowSelected(UITableView tableView, NSIndexPath indexPath) 
    { 
     UIAlertController alertcontroller = UIAlertController.Create("Row Selected", tableItems[indexPath.Row], UIAlertControllerStyle.Alert); 
     alertcontroller.AddAction(UIAlertAction.Create("ok",UIAlertActionStyle.Default,null)); 
     owner.PresentViewController(alertcontroller,true,null); 

     tableView.DeselectRow(indexPath,true); 
    } 
    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
    { 
     UITableViewCell cell = tableView.DequeueReusableCell(cellidentifier); 
     if (cell == null) 
      cell = new UITableViewCell(UITableViewCellStyle.Default, cellidentifier); 

     cell.TextLabel.Text = tableItems[indexPath.Row]; 
     return cell;   
    } 
} 

Antwort

0

Ich nehme ein Fehler ist, dass Sie ein einzelnes CNInfo setzen (was immer das ist) innerhalb eines foreach - das bedeutet, dass Sie es jedes Mal, und nur die letzten funktioniert überschreiben.

würde ich diese Linie Refactoring (mindestens):

CNinfo.Source = new TableSource(Info, this); 

Außerdem haben Sie zwei Konstruktoren, die ganz andere Dinge zu tun. Das Aufrufen von public TableSource(ClientInfo info, RoofExisting roofExisting) bedeutet, dass tableItems und owner null sind und eine NullReferenceException in Ihre Überschreibungsmethoden werfen, da sie nur im anderen Konstruktor festgelegt sind.

Ich habe nicht mit einem UITableViewSource in eine Weile verwirrt, aber ich würde denken, dass es eine Sammlung von Gegenständen halten würde. Sie machen eine UITableViewSource für jeweilsContactInfo.

Diese beiden Klassen müssen refaktoriert werden. Vielleicht finden Sie ein paar weitere Beispiele zum Erstellen eines UITableViewSource, bevor Sie versuchen, diesen Code zu ändern, damit Sie eine bessere Vorstellung davon haben, wie Sie ihn implementieren.