更新UITableViewController

时间:2018-07-24 11:26:57

标签: ios xamarin refresh

我有两个ViewController(ViewController A,ViewController B)。两者都是UITableviewController

在ViewController A中,我从数据库中获取数据并将其放入List<string>,以便可以显示它。

我有一个导航栏按钮可转到ViewControllerB。在ViewController B中,我具有带有其他项的列表。我可以通过滑动操作将其他项目添加到数据库中。这行得通。

当我回到ViewController A时,我想更新我的列表,但是我不知道如何:(

我用ViewDidAppear进行了尝试,但是它不起作用。

ViewController A:

public override void ViewDidAppear(bool animated)
{
    base.ViewDidAppear(animated);
    NavigationItem.Title = "Anwendungsfälle";

    // Hier geht es zum Hinzufügen der Anwendungsfeleder / -fälle oder Maßnahmen zum bestehenden Katalog

    this.NavigationItem.SetRightBarButtonItem(
        new UIBarButtonItem(UIBarButtonSystemItem.Add,
            (sender, args) =>
            {
                var alertController = UIAlertController.Create("Anwendungsfeld hinzufügen", "Wählen Sie eine Option aus", UIAlertControllerStyle.ActionSheet);

                // Hier geht es zur Vorgefertigten Bibliothek
                alertController.AddAction(UIAlertAction.Create("Aus Bibliothek hinzufügen", UIAlertActionStyle.Default, (Action) =>
                {
                    AddAnFaViewController controller = this.Storyboard.InstantiateViewController("AddAnFaViewController") as AddAnFaViewController;
                    controller.firmabereich = firmabereich;
                    controller.bereich = bereich;
                    controller.zieleid = zieleid;
                    controller.idafe = idafe;
                    this.NavigationController.PushViewController(controller, true);
                }));

                // Abbrechen Knopf
                alertController.AddAction(UIAlertAction.Create("Abbrechen", UIAlertActionStyle.Cancel, alert => Console.WriteLine("Cancel clicked")));
                    PresentViewController(alertController, true, null);
                }),
                true);

        var lines = new List<string>();


        using (MySqlConnection connection = new MySqlConnection("Server=xxxx;Port=3306;database=xxxxb;User Id=xxxxx;Password=xxxx;charset=utf8"))
        {
            string query = $"SELECT DISTINCT Anwendungsfall FROM {firmabereich} WHERE IDAFE LIKE '{idafe}' ORDER BY Anwendungsfall ASC";
            string query2 = $"SELECT DISTINCT IDAFA FROM {firmabereich} WHERE IDAFE LIKE '{idafe}' ORDER BY Anwendungsfall ASC";
            string query3 = $"SELECT DISTINCT PrioAnFa, Anwendungsfall FROM {firmabereich} WHERE IDAFE LIKE '{idafe}' ORDER BY Anwendungsfall ASC";
            MySqlCommand command = new MySqlCommand(query, connection);
            MySqlCommand command2 = new MySqlCommand(query2, connection);
            MySqlCommand command3 = new MySqlCommand(query3, connection);
            connection.Open();

            using (MySqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    anwendungsfälle.Add(reader.GetString(0));
                }
            }

            using (MySqlDataReader reader = command2.ExecuteReader())
            {
                while (reader.Read())
                {
                    anwendungsfälleid.Add(reader.GetString(0));
                }
            }
            using (MySqlDataReader reader = command3.ExecuteReader())
            {
                while (reader.Read())
                {
                    prio.Add(reader.GetString(0));
                }
            }

        }

        TableView.RowHeight = UITableView.AutomaticDimension;
        TableView.EstimatedRowHeight = 40f;
        TableView.ReloadData();

    }

1 个答案:

答案 0 :(得分:0)

由于重新加载数据会直接影响用户界面,因此您需要在GCD中重新加载数据。

 DispatchQueue.main.async {
       TableView.ReloadData();  
    }

GCD是Apple的多线程概念;因此,请花一些时间了解它在整个应用程序生命周期中如何工作。

  

This could be the good introduction