2011-12-09 12 views
0

次のエラーが発生し、解決できません。vbを使用してasp.netのgridviewにデータをバインドする際にエラーが発生しました

<%@ Page Language="VB" MasterPageFile ="~/Master.master" AutoEventWireup="false" CodeFile="test.aspx.vb" Inherits="test" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
<asp:GridView ID="GridView1" PageSize ="50" runat="server" AllowPaging="True" AllowSorting="True" 
      AutoGenerateColumns="False" DataKeyNames="ID"> 
     <Columns> 
      <asp:TemplateField HeaderText="ID"> 
       <ItemTemplate> 
        <%# Container.DataItemIndex + 1 %> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField DataField="Dname" HeaderText="Player" SortExpression="Dname" /> 
      <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" /> 
      <asp:BoundField DataField="GTScore" HeaderText="Score" 
       SortExpression="GTScore" /> 
      </Columns> 
     </asp:GridView> 
</asp:Content> 

これは、これは私の.aspx.vbのcode.Iがちょうど機能SelectToppersOfMonth1

からストアドプロシージャを呼び出していますし、ストアドプロシージャの私の選択クエリがある私の.aspxコード

Partial Class test 
Inherits System.Web.UI.Page 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles  Me.Load 
    Dim fDate As Date = New Date(Today.Year, Today.Month, 1) 
    Dim tDate As Date = New Date(Today.Year, Today.Month, Date.DaysInMonth(Today.Year, Today.Month)) 
    GridView1.DataSource = Game.SelectToppersOfMonth1(fDate, tDate) 
    GridView1.DataBind() 
End Sub 
End Class 

です

SELECT TOP 100 A.[dispName] as [Dname], A.[city] as [City], SUM(B.[score]) as [GTScore] 

FROM [Players] A,[Games] B 

WHERE A.[ID]=B.[playerID] AND B.[startedOn] BETWEEN @fromDate AND @toDate 

GROUP BY A.[dispName], A.[city] ORDER BY [GTScore] DESC 

私はエラー

を取得しています
DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'ID'. 
Description: An unhandled exception occurred during the execution of the current web  request. Please review the stack trace for more information about the error and  where it originated in the code. 

Exception Details: System.Web.HttpException: DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'ID'. 

答えて

2

IDの列が返されず、バインディングが壊れているため、ページマークアップ:DataKeyNames="ID"からこれを削除するだけです。 SQLクエリを変更して、ID列も返すようにしてください。

+0

ありがとう、私はasp.netの初心者です。私はDataKeyNamesの意味を知っていません。私はちょうど他のgridviewから貼り付けコピー。 。:D –

0

DataKeyNamesプロパティのIDを参照していますが、これはSQLクエリにはありません。それは普通ですか?

+0

彼はヘッダー内の/にIDをバインドしていません。彼はDataKeyNameとしてIDを設定しようとしているので、グリッドはバインドされたデータのどの列がPKであるかを認識します。 –

+0

私は自分の答えを編集していたが、あなたのコメントを見た...あなたは早すぎた – lnu

関連する問題