DataBinding: 'System.Data.DataRowView' does not contain a property with the name

匿名 (未验证) 提交于 2019-12-03 08:35:02

问题:

I am getting this weird error... the primary key in my database is 'DocumentID' so I know that is not the issue. I am trying to get the select,edit & delete gridview buttons to work but I need the datakeynames to be set correctly for them to be available to use. any ideas?

<asp:GridView ID="GridView1" runat="server" DataSourceID="sdsDocuments" EnableModelValidation="True"         SelectedIndex="0" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" DataKeyNames="DocumentID, DocumentTitle, DocumentBody">         <Columns>             <asp:BoundField DataField="DocumentID" HeaderText="DocumentID" ReadOnly="True" SortExpression="ID" />             <asp:BoundField DataField="DocumentTitle" HeaderText="DocumentTitle" SortExpression="Title" />             <asp:BoundField DataField="DocumentBody" HeaderText="DocumentBody" SortExpression="Body" />             <asp:CommandField ShowSelectButton="True" ShowDeleteButton="True" />         </Columns>     </asp:GridView>     <asp:SqlDataSource ID="sdsDocuments" runat="server" ConnectionString="<%$ ConnectionStrings:blcDocumentationConnectionString %>"         SelectCommand="SELECT [DocumentTitle], [DocumentBody] FROM [tblDocument]" /> 

Here is the stack trace...

    [HttpException (0x80004005): DataBinding: 'System.Data.DataRowView' does not contain a                 property with the name 'DocumentID'.]          System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName) +8672869        System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +2178        System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +57        System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) +14        System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +114        System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +31        System.Web.UI.WebControls.DataBoundControl.PerformSelect() +142        System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73        System.Web.UI.WebControls.GridView.DataBind() +4        System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82        System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +72        System.Web.UI.Control.EnsureChildControls() +87        System.Web.UI.Control.PreRenderRecursiveInternal() +44        System.Web.UI.Control.PreRenderRecursiveInternal() +171        System.Web.UI.Control.PreRenderRecursiveInternal() +171     System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842 

回答1:

Well, you haven't selected the documentid column and hence it's not present in either datatable or dataview which you are binding to grid OR referencing that column through datatable.

Change your query to

 SelectCommand="SELECT [DocumentID],[DocumentTitle], [DocumentBody] FROM [tblDocument]" />  


回答2:

It seems that your sqldatasource does not return the DocumentId column.

Maybe you should change the datasource definition to this:

<asp:SqlDataSource ID="sdsDocuments" runat="server" ConnectionString="<%$ ConnectionStrings:blcDocumentationConnectionString %>"     SelectCommand="SELECT [DocumentID], [DocumentTitle], [DocumentBody] FROM [tblDocument]" /> 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!