Q:

Listbox returns System.Data.DataRowView instead of values

I am doing a project for my school, where I have to make a C# Windows Forms application that lets me interact with my PostgreSQL database. I have made a listbox, which is supposed to get the names of the tables from my database, and when I select these names, data from that table is show in the datagridview object in the form. The problem is, however, all my listbox values are System.Data.DataRowView, and datagridview only displays values from the first table in the list.
The code: 
    DataTable tabulusaraksts = new DataTable();
    DataTable tabula = new DataTable();
    NpgsqlDataAdapter adapter = new NpgsqlDataAdapter();
    NpgsqlDataAdapter adapter2 = new NpgsqlDataAdapter();
    string tab;
    public datubaze()
    {
        InitializeComponent();
        string connectionstring = "Server=localhost;Port=5432;UserId=postgres;Password=students;Database=retrospeles;";
        //string connectionstring = String.Format("Server={0};Port={1};" +
        //       "User Id={2};Password={3};Database={4};",
        //        serveris.ToString(), port.ToString(), user.ToString(),
        //        password.ToString(), database.ToString());
        NpgsqlConnection ncon = new NpgsqlConnection(connectionstring);
        NpgsqlCommand listfill = new NpgsqlCommand("select table_name from INFORMATION_SCHEMA.tables WHERE table_schema = ANY (current_schemas(false));", ncon);
        adapter.SelectCommand = listfill;
        adapter.Fill(tabulusaraksts);
        listBox1.DataSource = tabulusaraksts;
        listBox1.DisplayMember = "table_name";
        NpgsqlCommand showtable = new NpgsqlCommand("select * from " + tab +";" , ncon);
        adapter2.SelectCommand = showtable;
    }
public void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {

        tab = listBox1.GetItemText(listBox1.SelectedItem);
        adapter2.Fill(tabula);
        dataGridView1.DataSource = tabula;
}

A:

That code should work. I tried it with some test data and ListBox was filled with correct values.
To be sure, try to also set ValueMember like 
listBox1.DisplayMember = "table_name";

I think the best approach is to add DataTable rows to your ListBox using loop or Linq list. After filling tabulusaraksts iterate through DataRows and add them as items to ListBox, without setting DataSource Something like this (Linq):
adapter.SelectCommand = listfill;
adapter.Fill(tabulusaraksts);
listBox1.Items.AddRange(tabulusaraksts.AsEnumerable().Select(row => row[0].ToString()).ToArray());
NpgsqlCommand showtable = new NpgsqlCommand("select * from " + tab +";" , ncon);
adapter2.SelectCommand = showtable;

or, using foreach loop
adapter.SelectCommand = listfill;
adapter.Fill(tabulusaraksts);

listBox1.Items.Clear();
foreach (DataRow row in tabulusaraksts.Rows)
{
    listBox1.Items.add(tabulusaraksts[0].ToString());
}

NpgsqlCommand showtable = new NpgsqlCommand("select * from " + tab +";" , ncon);
adapter2.SelectCommand = showtable;

