Update Row in nested Gridview

I have a nested Gridview that displays accounts based on the parent gridview record.  Switching to Edit mode for the rows in the nested seems to work, but the Update function only works for the first row. If you select any row other than the first, the .EditIndex and SelectedIndex = -1
Protected Sub grdProducersList_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles grdProducersList.RowUpdating
        Dim iRow As Integer = e.RowIndex
        Dim grdAccounts As GridView = CType(grdProducersList.Rows(iRow).FindControl("grdAccounts"), GridView)
        'Dim iRow2 As Integer = grdAccounts.EditIndex
        'Dim ddlsecurity As DropDownList = CType(grdAccounts.Rows(iRow2).FindControl("ddlsecurity"), DropDownList)
        Dim srcAccounts As SqlDataSource = CType(grdProducersList.Rows(iRow).FindControl("srcAccounts"), SqlDataSource)
        Dim grdRow As GridViewRow = grdAccounts.Rows(grdAccounts.EditIndex)
        Dim ddlsecurity As DropDownList = CType(grdRow.FindControl("ddlSecurity"), DropDownList)
        'For Each row As GridViewRow In grdAccounts.Rows
        'Dim ddlsecurity As DropDownList = CType(row.FindControl("ddlSecurity"), DropDownList)
        srcAccounts.UpdateParameters("Security").DefaultValue = ddlsecurity.SelectedValue.ToString
        'Next
        ' Dim ddlSecurity As DropDownList = CType(grdAccounts.SelectedRow.FindControl("ddlSecurity"), DropDownList)
 
 
    End Sub
 
Protected Sub grdProducersLIst_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdProducersList.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            Dim CompanyID As String = CType(DataBinder.Eval(e.Row.DataItem, "CompanyID"), String)
            Dim CoopID As String = CType(DataBinder.Eval(e.Row.DataItem, "CoopID"), String)
            'Dim srcAccounts As SqlDataSource = CType(e.Row.FindControl("srcAccounts"), SqlDataSource)
            Dim srcAccounts As SqlDataSource = CType(e.Row.FindControl("srcAccounts"), SqlDataSource)
            srcAccounts.SelectParameters("CoopID").DefaultValue = CoopID.ToString
            srcAccounts.SelectParameters("CompanyID").DefaultValue = CompanyID.ToString
 
        End If
    End Sub
 
<asp:GridView ID="grdProducersList" runat="server" DataSourceID="srcProducerList"
                                AutoGenerateColumns="false" ShowHeader="false" GridLines="none" OnRowDataBound="grdProducersList_RowDataBound">
                                <Columns>
                                    <asp:TemplateField>
                                        <ItemTemplate>
                                            <%#Eval("CompanyName") %>
                                            <asp:GridView ID="grdAccounts" runat="server" DataSourceID="srcAccounts" AutoGenerateColumns="false"
                                                AutoGenerateEditButton="true" DataKeyNames="UID" OnRowUpdating="grdProducersList_RowUpdating">
                                                <Columns>
                                                    <asp:BoundField HeaderText="Account" DataField="username" />
                                                    <asp:BoundField HeaderText="Password" DataField="pword" />
                                                    <asp:CheckBoxField HeaderText="Active" DataField="Active" />
                                                    <asp:CheckBoxField HeaderText="Multi" DataField="Multi" />
                                                    <asp:TemplateField HeaderText="Security">
                                                        <ItemTemplate>
                                                            <%# Security_Display(Eval("Security")) %>
                                                        </ItemTemplate>
                                                        <EditItemTemplate>
                                                            <asp:DropDownList ID="ddlSecurity" runat="server" SelectedValue='<%# Security_Value(Bind("Security")) %>'
                                                                AppendDataBoundItems="true">
                                                                <asp:ListItem Text="Full Access" Value="F"></asp:ListItem>
                                                                <asp:ListItem Text="Limited Access" Value="L"></asp:ListItem>
                                                            </asp:DropDownList>
                                                        </EditItemTemplate>
                                                    </asp:TemplateField>
                                                </Columns>
                                            </asp:GridView>
                                            <asp:SqlDataSource ID="srcAccounts" runat="server" ConnectionString='<%$ ConnectionStrings:QMSMisc %>'
                                                SelectCommand="select uid,username,pword,active,multi,security from twaccount where typeid='p' and coopid=@CoopID and companyID=@CompanyID"
                                                UpdateCommand="update twaccount set username=@Username, pword=@Pword, active=@active, multi=@multi, security=@Security where uid=@UID">
                                                <SelectParameters>
                                                    <asp:Parameter Name="CoopID" />
                                                    <asp:Parameter Name="CompanyID" />
                                                </SelectParameters>
                                                <UpdateParameters>
                                                    <asp:Parameter Name="UserName" />
                                                    <asp:Parameter Name="Pword" />
                                                    <asp:Parameter Name="Active" />
                                                    <asp:Parameter Name="Multi" />
                                                    <asp:ControlParameter Name="Security" />
                                                </UpdateParameters>
                                            </asp:SqlDataSource>
                                            <hr />
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                </Columns>
                            </asp:GridView>
                            <asp:SqlDataSource ID="srcProducerList" runat="server" ConnectionString='<%$ ConnectionStrings:MIMS %>'
                                SelectCommand="select coopID, ProdID + ', ' + ProdName as 'CompanyName',ProdID as 'CompanyID' from TCProducer where active = 1 and CoopID='Select' order by prodid">
                            </asp:SqlDataSource>

Open in new window

CahlAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

guru_samiCommented:
just an idea....did you try using e.RowIndex instead of EditIndex ..and i believe SelectedIndex will be -1.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
CahlAuthor Commented:
Thanks, for the reply. I'm using e.RowIndex to get the row of grdProducersList, but I'm having trouble either understanding the whole nesting thing, and/or getting the row in grdAccounts that is being selected and updated.
0
CahlAuthor Commented:
From what I can see, you suggestion to use e.RowIndex works. Since grdAccounts is nested in grdProducersList, how do I determine which row in grdproducerslist the nested gridview is in so I can grab it and the sqldatasource?

I think this is close, but how do I determine what the current row is in grdProducersList?
Dim grdAccounts As GridView = CType(grdProducersList.Rows(0).FindControl("grdAccounts"), GridView)
0
CahlAuthor Commented:
I believe I figured it out. By using the sender of the  Protected Sub grdProducersList_RowUpdating procedure, I'm able to determie the GridView that fired the event. From this I'm able grab its datasource with   Dim srcAccounts As SqlDataSource = CType(grdAccounts.DataSourceObject, SqlDataSource) and populate the parameter from the dropdownlist.
0
CahlAuthor Commented:
Thanks for your help with the RowIndex issue!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
ASP.NET

From novice to tech pro — start learning today.