0
私の学校のプロジェクトでは、PostgreSQLデータベースとやりとりできるC#Windows Formsアプリケーションを作成する必要があります。リストボックスを作成しました。これはデータベースからテーブルの名前を取得することになっています。これらの名前を選択すると、そのテーブルのデータがフォームのdatagridviewオブジェクトに表示されます。ただし、リストボックスの値はすべてSystem.Data.DataRowViewであり、datagridviewはリストの最初のテーブルの値のみを表示するという問題があります。Listboxは値の代わりにSystem.Data.DataRowViewを返します
コード:
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;
}
foreach
ループを使用して、か:
DataRows
を通じてtabulusaraksts
反復を充填した後、これ(LINQの)のようなDataSource
何かを設定せず、ListBox
にアイテムとして追加リストボックスから値を選択しようとすると、エラーが表示されます。エラー:42601:または ";" –@KristiansKontersは 'adapter2を構築しません。 'tab'はまだ空の文字列であり、リストボックス項目が選択された後にその値を取得するので、' datbuose'メソッドでは 'SelectCommand'を使用します。 'listBox1_SelectedIndexChanged'メソッドで作成します。 – Nino
それは働いて、ありがとう! –