2012-10-20 41 views
3

顯示,PostgreSQL的查詢的組合框我有一個在PostgreSQL完全執行一個查詢:不能在Visual Basic.net

SELECT 
     matchid 
    , f1.firstname 
    , f1.lastname 
    , f2.firstname 
    , f2.lastname 
FROM matches AS m 
    INNER JOIN fighters AS f1 
     ON f1.fighterid = m.fighteroneid 
    INNER JOIN fighters AS f2 
     ON f2.fighterid = m.fightertwoid 

它顯示一行與戰士,但是當我試圖在結果中顯示一個組合框,它顯示爲「System.Data.DataRow」而不是數據。

代碼在VB.NET:

mySelectQuery = "SELECT f1.firstname, f1.lastname, f2.firstname, f2.lastname FROM matches AS m INNER JOIN fighters AS f1 ON f1.fighterid = m.fighteroneid INNER JOIN fighters AS f2 ON f2.fighterid = m.fightertwoid" 

pgAdapter = New PgSqlDataAdapter(mySelectQuery, pgConnection) 
    pgAdapter.Fill(dtMatches) 

    With cboMatches 
     .DisplayMember = "fighters" 
     .ValueMember = "matchid" 
     .DataSource = dtMatches 
     .SelectedIndex = -1 
    End With 

我試圖使用戰鬥機,米,F1,F2作爲顯示元件和它總是返回相同的輸出。

如果我將.DataSource移動到.DisplayMember上面,我收到錯誤:無法綁定到新的顯示成員。參數名稱:newDisplayMember。

謝謝你在前進,

斯賓塞

回答

2

ValueMember和DisplayMember應該是指你的數據源的列名。
您沒有任何與分配的名稱。
您可以嘗試爲DisplayMember指定一個名稱,但您的查詢不會生成任何MatchID。

我不是PostegreSQL的專家,但是,你可以嘗試以下操作來aggregate the names

mySelectQuery = "SELECT m.MatchID, string_agg(f1.firstname, f1.lastname, ' - ', " + 
       "f2.firstname, f2.lastname, ' ') as Fighters " + 
       "FROM matches AS m INNER JOIN fighters AS f1 ON f1.fighterid = m.fighteroneid" + 
       " INNER JOIN fighters AS f2 ON f2.fighterid = m.fightertwoid" 

然後用

With cboMatches 
    .DisplayMember = "Fighters" 
    .ValueMember = "MatchID" 
    .DataSource = dtMatches 
    .SelectedIndex = -1 
End With 
+0

我加MatchID到查詢,但我想我只是不知道如何使用的別名將DisplayMember – Spence

+0

我的想法(要在實際PostegreSQL分貝測試)是:聚集的名字戰士用短劃線將它們分開,並用作爲DisplayMember的名稱調用聚合結果。就這樣。說實話,我不確定使用的語法是否正確,但我希望能指出您的方向正確 – Steve

+0

您確實需要做什麼 – Spence

2

我結束了使用COALESCE因爲string_agg不與名工作沒有CASTS的類型。

SELECT m.MatchID, COALESCE(f1.firstname || ' ' || f1.lastname || ' - ' || f2.firstname || ' ' || f2.lastname) as Fighters 
     FROM matches AS m INNER JOIN fighters AS f1 ON f1.fighterid = m.fighteroneid 
     INNER JOIN fighters AS f2 ON f2.fighterid = m.fightertwoid 
+0

給予了其他的榮譽,因爲他指出了我正確的方向。感謝所有的幫助 – Spence

+0

很高興爲您提供幫助。 – Steve