2016-05-07 10 views
0

enter image description hereGridViewの列にそのIDに対応する名前が表示されるようにするにはどうすればよいですか?

Iveには、ホームと離れたチーム名として表示したいSQLデータソースに接続されたGridViewがあります。代わりに、Home_Team_IDAway_Team_IDは、両側のTeam_ID that is stored in another table. I've tried "Bind("Team_name")" but this returns the first team name in the Team`テーブルと一致するため、検索できます。これをどうやって解決するのですか?各家庭でアウェイチームの列はそのIDが(この場合は8と32で)私はそれらに対応するTeam_IDs例えばとこれらを交換したいと言う enter image description here

<asp:GridView ID="EnterMatchGridView" runat="server" AutoGenerateColumns="False" DataKeyNames="Team_ID" DataSourceID="SqlDataSource2" OnRowDataBound="EnterMatchGridView_RowDataBound"> 
       <Columns> 
        <asp:TemplateField HeaderText="Home_team_ID" SortExpression="Home_team_ID"> 
         <EditItemTemplate> 
          <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Home_team_ID") %>'></asp:TextBox> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label1" runat="server" Text='<%# Bind("Home_team_ID") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Away_team_ID" SortExpression="Away_team_ID"> 
         <EditItemTemplate> 
          <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Away_team_ID") %>'></asp:TextBox> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label2" runat="server" Text='<%# Bind("Away_team_ID") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:BoundField DataField="Home_team_score" HeaderText="Home_team_score" SortExpression="Home_team_score" /> 
        <asp:BoundField DataField="Away_team_score" HeaderText="Away_team_score" SortExpression="Away_team_score" /> 
        <asp:TemplateField HeaderText="Game_date" SortExpression="Game_date"> 
         <EditItemTemplate> 
          <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Game_date") %>'></asp:TextBox> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label3" runat="server" Text='<%# Bind("Game_date") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
      <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:SportsData2ConnectionString %>" SelectCommand="SELECT MatchStatistics.Home_team_ID, MatchStatistics.Away_team_ID, MatchStatistics.Home_team_score, MatchStatistics.Away_team_score, MatchStatistics.Game_date, Team.Team_ID, Team.Team_name FROM MatchStatistics INNER JOIN Team ON (MatchStatistics.Home_team_ID = Team.Team_ID OR MatchStatistics.Away_team_ID = Team.Team_ID) AND MatchStatistics.Home_team_ID = Team.Team_ID WHERE (Team.Team_ID = @Team_ID)"> 
       <SelectParameters> 
        <asp:ControlParameter ControlID="HomeFormDDL" Name="Team_ID" PropertyName="SelectedValue" Type="Int32" /> 
       </SelectParameters> 
      </asp:SqlDataSource> 

アストン・ヴィラとノーリッチは、それぞれTeam_ID 8と32です。

+0

「8」を表示する代わりに、「Dodgers」などを表示したいですか? – gmiley

+0

はい!ホームチームとアウェイチームのIDは、外部キーなのでTeam_IDと一致します。 –

+0

データの生成に使用するSQLクエリはどのようなものですか?また、グリッドに読み込まれるデータのサンプルを提供できますか?データが正しいと仮定すると、idと同じ方法でチーム名を含む列をバインドすることができます。 – gmiley

答えて

0

私はあなたがHeaderTextの列を設定したいと思うと思います。

foreach(var col in EnterMatchGridView.Columns) 
{ 
    col.HeaderText = "Some Text"; 
} 

上記の例は、正確にはあなたが望むものではありませんが、アクセス方法を示しています。上記のASPコードを見ると、<asp:TemplateField HeaderText="Away_team_ID" ...>が表示されます。コードで設定する必要がない場合は、すぐに変更できます。

また、必要に応じて、そのプロパティに何かをバインドすることもできます。

説明が完了したら、SQLクエリがデータを適切に選択していることを確認してください。あなたのテーブル構造を知らなくても、私は推測することができますが、何かしたいことがあります。

select t1.home_team_id, t2.team_name as home_team_name, 
     t1.away_team_id, t3.team_name as away_team_name, 
     t1.home_team_score, t1.away_team_score, t1.game_date 
from game_table t1 
join team_table t2 
on t2.team_id = t1.home_team_id 
join team_table t3 
on t3.team_id = t1.away_team_id; 

次に、あなたがあなたの列にhome_team_nameaway_team_nameにバインドすることができます。

上記のようなのDataTableを使用して、あなたが次のことを行うことができるはず、その後、あなたのDataTableとしてresultsにバインド:

DataTable games = new DataTable() 
games.Columns.Add("Home_Team_ID", typeof(int)); 
games.Columns.Add("Home_Team_Name", typeof(string)); 
games.Columns.Add("Away_Team_ID", typeof(int)); 
games.Columns.Add("Away_Team_Name", typeof(string)); 
games.Columns.Add("Home_Team_Score", typeof(int)); 
games.Columns.Add("Away_Team_Score", typeof(int)); 
games.Columns.Add("Game_Date", typeof(DateTime)); 

var results = from dataRows1 in MatchStatistics.AsEnumerable() 
       join dataRows2 in Teams.AsEnumerable() 
       on dataRows1.Field<int>("Home_Team_ID") equals dataRows2.Field<int>("Team_ID") 
       join dataRows3 in Teams.AsEnumerable() 
       on dataRows1.Field<int>("Away_Team_ID") equals dataRows3.Field<int("Team_ID") 
       select games.LoadDataRow(new object[] 
       { 
        dataRows1.Field<int>("Home_Team_ID"), 
        dataRows2.Field<string>("Team_Name"), 
        dataRows1.Field<int>("Away_Team_ID"), 
        dataRows3.Field<string>("Team_Name"), 
        dataRows1.Field<int>("Home_Team_Score"), 
        dataRows1.Field<int>("Away_Team_Score"), 
        dataRows1.Field<DateTime>("Game_Date") 
       }, false); 

結局、何それはまで来ることはあなたがTeamsにアクセスする必要があるということですその関係を使用しているDataTableでは、結果をTeam_IDでフィルタリングしない限り、テーブルだけにアクセスすることはできません。そうしないと、DataTableの最初の項目またはすべての項目が取得されます。

+0

ヘッダーは問題ではありません。対応する名前を表示するにはIDが必要です。 –

+0

グリッドをどのように見せるかのサンプルを提供するために質問を編集できますか?あなたが望むものはあまり明確ではありません。グリッドをどのように見せたいか、それが現在の外観、つまりどのように見えるかの簡単な例を提供してみましょう。'Column1 |列2 | Column3' '====================' 'value1 |値2 | value3' - etc ...しかし明らかに適切にフォーマットされています。ちょうど私たちは、あなたが期待していることのアイデアを得ることができます。 – gmiley

関連する問題