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
' Second GridCode:<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>
' Object Data SourcesCode:<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>
Thanks,Code:<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>




Reply With Quote