DataKeyNames requires the name(s) of the Primary Key column.

On Jan 21, 1:41 am, Pizzini <[email protected]> wrote:
> I'm trying to put together what I thought was a simple gridview/
> detailsview. But I'm running into this when I try to view the page.
> (The rest of the page, loads fine if I take the grid, details, and
> datasources.)
>
> "Data keys must be specified on GridView 'gvAddresses' before the
> selected data keys can be retrieved.  Use the DataKeyNames property to
> specify data keys."
>
> I would try, and have tried, adding the DataKeyNames, but I can't seem
> to figure out what it wants there. Once I add the property it lets the
> page load, as long as I don't pass the customerid query string. I
> tried ADDRESS_ID and CUSTOMER_ID but got this error:
> "DataBinding: 'System.Data.DataRowView' does not contain a property
> with the name 'ADDRESS_ID'."
>
> ADDRESS_ID is the primary key, and CUSTOMER_ID is a foreign key.
>
> When I test the SQL, it returns the expected rows.
>
> Here's my code of the grid view, it's sql data source, the details
> view, and it's sql data source. It was all autogenerated the same way
> as the rest of the gridview/detailsviews on the page.
>
> <asp:GridView ID="gvAddresses" runat="server"
> AutoGenerateColumns="False" DataSourceID="sdsAddresses">
>         <Columns>
>             <asp:CommandField ShowSelectButton="True" />
>             <asp:BoundField DataField="TYPE" HeaderText="TYPE"
> SortExpression="TYPE" />
>         </Columns>
>     </asp:GridView>
>
>     <asp:SqlDataSource ID="sdsAddresses" runat="server"
> ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
>         ProviderName="<%$
> ConnectionStrings:ConnectionString.ProviderName %>"
> SelectCommand="SELECT [TYPE] FROM [ADDRESSES] WHERE ([CUSTOMER_ID]
> = ?)">
>         <SelectParameters>
>             <asp:QueryStringParameter Name="CUSTOMER_ID"
> QueryStringField="customerid" Type="String" />
>         </SelectParameters>
>     </asp:SqlDataSource>
>
>     <asp:DetailsView ID="DetailsView3" runat="server"
> AutoGenerateRows="False" DataSourceID="sdsAddressDetails"
>         Height="50px" Width="125px">
>         <Fields>
>             <asp:BoundField DataField="STREET" HeaderText="STREET"
> SortExpression="STREET" />
>             <asp:BoundField DataField="CITY" HeaderText="CITY"
> SortExpression="CITY" />
>             <asp:BoundField DataField="STATE" HeaderText="STATE"
> SortExpression="STATE" />
>             <asp:BoundField DataField="ZIP" HeaderText="ZIP"
> SortExpression="ZIP" />
>         </Fields>
>     </asp:DetailsView>
>
>     <asp:SqlDataSource ID="sdsAddressDetails" runat="server"
> ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
>         ProviderName="<%$
> ConnectionStrings:ConnectionString.ProviderName %>"
> SelectCommand="SELECT [STREET], [CITY], [STATE], [ZIP] FROM
> [ADDRESSES] WHERE ([ADDRESS_ID] = ?)">
>         <SelectParameters>
>             <asp:ControlParameter ControlID="gvAddresses"
> Name="ADDRESS_ID" PropertyName="SelectedValue"
>                 Type="Int32" />
>         </SelectParameters>
>     </asp:SqlDataSource>
>
> I think that's everything there is to know... Thank in advance.

Reply via email to