3

Postgresql で完全に実行されるクエリがあります。

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

戦闘機で 1 行が表示されますが、結果をコンボ ボックスに表示しようとすると、データではなく「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

ファイター、m、f1、f2 を表示メンバーとして使用しようとしましたが、常に同じ出力が返されます。

.DataSource を .DisplayMember の上に移動すると、次のエラーが表示されます: 新しい表示メンバーにバインドできません。パラメータ名: newDisplayMember.

前もって感謝します、

スペンス

4

2 に答える 2

2

string_aggはCASTSのない名前タイプでは機能しないため、COALESCEを使用することになりました。

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
于 2012-10-20T14:17:55.430 に答える
2

ValueMember と DisplayMember は、データソースの列名を参照する必要があります。
名前が割り当てられたものはありません。
DisplayMember に 1 つの名前を割り当てようとすることもできますが、クエリは MatchID を生成しません。

私は PostegreSQL の専門家ではありませんが、次のようにして名前を集約できます。

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  
于 2012-10-20T13:38:23.180 に答える