Заполнить массив из sqlite - PullRequest
1 голос
/ 29 апреля 2020

Я хочу заполнить массив из базы данных sqlite.

Я заполнил базу данных данными, но не смог просмотреть данные внутри массива, чтобы снова просмотреть их в виде списка.

Обратите внимание, что представление списка состоит из представления внутри (Заголовок, Подзаголовок).

  public  List<TableItem> tableitems;

 public void fillarray()
        {
           var db = new SQLiteConnection(dbPath);
            tableitems = new List<TableItem>();
            var table = db.Table<SqliteDB.Departments>();
          foreach (var s in table)
            {
             new TableItem() { Heading = s.Id.ToString(), SubHeading = s.FullName.ToString() };
            }
           }

1 Ответ

1 голос
/ 29 апреля 2020

Согласно вашему коду, у вас есть одно имя таблицы Departments в базе данных sqlite, вы хотите получить данные из этой таблицы и заполнить эти данные в виде табличных элементов и отобразить в ListView, я прав?

Если да есть два шага, которые вам нужно сделать, во-первых, вам нужно получить данные из базы данных sqlite, во-вторых, вам нужно создать пользовательскую строку в ListView для отображения табличных элементов.

 private SQLiteConnection db;
 private List<TableItem> items;

 private void Btnget_Click(object sender, System.EventArgs e)
    {
       string dpPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "Persons.db3");
       db = new SQLiteConnection(dpPath);
       foreach(var de in db.Table<Departments>())
        {
            TableItem item = new TableItem();
            item.Heading = de.id.ToString();
            item.SubHeading = de.FullName;
            items.Add(item);
        }

        listview1.Adapter = new ListViewAdapter(this,items);
    }

Пользовательская строка в ListView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:id="@+id/textView1"/>
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:id="@+id/textView2"/>
</LinearLayout>

ListViewAdapter.cs:

 public class ListViewAdapter : BaseAdapter<TableItem>
{
    List<TableItem> items;
    Activity context;

    public ListViewAdapter(Activity context, List<TableItem> items) :base()
    {
        this.context = context;
        this.items = items;
    }
    public override TableItem this[int position]
    {
        get { return items[position]; }
    }

    public override int Count
    {
        get { return items.Count; }
    }

    public override long GetItemId(int position)
    {
        return position;
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var item = items[position];

        View view = convertView;
        if (view == null) // no view to re-use, create new
            view = context.LayoutInflater.Inflate(Resource.Layout.CustomRow, null);
        view.FindViewById<TextView>(Resource.Id.textView1).Text = item.Heading;
        view.FindViewById<TextView>(Resource.Id.textView2).Text = item.SubHeading;


        return view;
    }
}
...