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.
