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 '를 생성하지 않습니다. 'datbuose' 메서드에서'SelectCommand'를 호출합니다. 왜냐하면'tab'은 여전히 빈 문자열이고 listbox 항목이 선택된 후에 값을 가져 오기 때문입니다. 'listBox1_SelectedIndexChanged' 메소드로 생성하십시오. – Nino
정말 고마워요. –