Click to See Complete Forum and Search --> : GridView not passsing Id on Update/Delete


Scott.Macmaster
July 17th, 2009, 02:42 PM
I have a page with two GridViews using an object data source. Basically, it's a drill-down report. You select something in the first grid and it shows related data in the second grid.

The problem I'm having is with update/delete in the second grid. It calls Update/Delete but it's passing 0 for the first key field instead of the current id. I added a handler for RowUpdating to see if it's listed in e.Keys. It is however, it is 0. How do I get it to have the current value?

' First Grid

<asp:GridView
ID="viewQueues"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="QueueId"
DataSourceID="dataQueues">
<Columns>
<asp:CommandField
ShowEditButton="True"
ShowSelectButton="True"
ShowDeleteButton="True" />
<asp:BoundField
DataField="Division"
HeaderText="Division"
SortExpression="Division" />
<asp:TemplateField
HeaderText="Division Head"
SortExpression="DivisionHeadPersonId">
<EditItemTemplate>
<asp:DropDownList
ID="lstDivisionHeads"
runat="server"
DataSourceID="dataPeopleList"
DataTextField="Name"
DataValueField="PersonId"
SelectedValue='<%# Bind("DivisionHeadPersonId") %>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label
ID="Label1"
runat="server"
Text='<%# GetNameFromPersonId(Eval("DivisionHeadPersonId")) %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="Payer Person"
SortExpression="PayerPersonId">
<EditItemTemplate>
<asp:DropDownList
ID="lstPayers"
runat="server"
DataSourceID="dataPeopleList"
DataTextField="Name"
DataValueField="PersonId"
SelectedValue='<%# Bind("PayerPersonId") %>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label
ID="Label2"
runat="server"
Text='<%# GetNameFromPersonId(Eval("PayerPersonId")) %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>


' Second Grid

<asp:GridView
ID="viewSteps"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="QueueId,StepNumber"
DataSourceID="dataQueueSteps">
<Columns>
<asp:CommandField
ShowDeleteButton="True"
ShowEditButton="True" />
<asp:TemplateField
HeaderText="PersonId"
SortExpression="PersonId">
<EditItemTemplate>
<asp:DropDownList
ID="lstPeople"
runat="server"
DataSourceID="dataPeopleList"
DataTextField="Name"
DataValueField="PersonId"
SelectedValue='<%# Bind("PersonId") %>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label
ID="Label1"
runat="server"
Text='<%# GetNameFromPersonId(Eval("PersonId")) %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>


' Object Data Sources

<asp:ObjectDataSource
ID="dataQueues"
runat="server"
SelectMethod="GetQueues"
TypeName="ApprovalQueue.Data+ApprovalQueueDAL"
UpdateMethod="UpdateQueue"
DeleteMethod="DeleteQueue">
<DeleteParameters>
<asp:Parameter Name="queueId" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="queueId" Type="Int32" />
<asp:Parameter Name="division" Type="String" />
<asp:Parameter Name="divisionHeadPersonId" Type="Int32" />
<asp:Parameter Name="payerPersonId" Type="Int32" />
</UpdateParameters>
</asp:ObjectDataSource>

<asp:ObjectDataSource
ID="dataQueueSteps"
runat="server"
DeleteMethod="DeleteStep"
SelectMethod="GetSteps"
TypeName="ApprovalQueue.Data+ApprovalQueueStepDAL"
UpdateMethod="UpdateStep">
<DeleteParameters>
<asp:Parameter Name="queueId" Type="Int32" />
<asp:Parameter Name="stepNumber" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="queueId" Type="Int32" />
<asp:Parameter Name="stepNumber" Type="Int32" />
<asp:Parameter Name="personId" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter
ControlID="viewQueues"
Name="queueId"
PropertyName="SelectedValue"
Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>


Thanks,