you will need to add the dataKeyNames attribute
(DataKeyNames="ADDRESS_ID, CUSTOMER_ID")  :

<asp:GridView ID="gvAddresses" runat="server"
AutoGenerateColumns="False" DataSourceID="sdsAddresses"   ==>
DataKeyNames="ADDRESS_ID, CUSTOMER_ID" <== >
        <Columns>
            <asp:CommandField ShowSelectButton="True" />
            <asp:BoundField DataField="TYPE" HeaderText="TYPE"
SortExpression="TYPE" />
        </Columns>
    </asp:GridView>


Also change your source control  to obtain the two values (edit your
SelectCommand):
    <asp:SqlDataSource ID="sdsAddresses" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
        ProviderName="<%$
ConnectionStrings:ConnectionString.ProviderName %>"
SelectCommand="SELECT [ADDRESS_ID],[CUSTOMER_ID], [TYPE] FROM
[ADDRESSES] WHERE ([CUSTOMER_ID]
= ?)">


then in your event you can retrieve this

protected void gvAddresses_SelectedIndexChanges(object sender,
EventArgs e)
{

DataKey data =  gvAddresses.SeleectedDataKey;
string PrimaryKey = (string)data.Values["ADDRESS_ID"];
string ForeignKey = (string)data.Values["CUSTOMER_ID"];
}

 I hope that works
_____________________

On Jan 21, 1:00 am, Cerebrus <[email protected]> wrote:
> 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