Update DB From a Drop Down within a Grid View , ASP.NET

Hello,
I have one ASP.NET Grid view GV1, containing one template field. "Reason"
in the Edit Item Template, i have one Drop Down DD1, and i want that when the user hits edit, to be able to choose a value from the DD, which will be updated in the underlying Data Base.

The DD1, is not data bound, it has list items.
Now when i am updating from the GV1, a null value is going to the DB.

How can i make only one selected value from the DD1, updatable in the DB?
thanks

<asp:TemplateField HeaderText="Reason">
                <EditItemTemplate>
                    <asp:DropDownList ID="DD1" runat="server" 
                        Font-Names="Cambria" Font-Size="8pt"  >
                        <asp:ListItem>R1</asp:ListItem>
                        <asp:ListItem>R2</asp:ListItem>
                        <asp:ListItem>R3</asp:ListItem>
                        <asp:ListItem>R4</asp:ListItem>
                        <asp:ListItem>Other</asp:ListItem>
                    </asp:DropDownList>  
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("AppReas") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

Open in new window

Nyana22Asked:
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:
So whatever you select...and click update...it is passing null value ...right?

Can you also share your dataSource code...also any relevant code from your code-behind.
0
Nyana22Author Commented:
Yes Sami, That true,
For display :
There is a stored procedure to select data from 2 tables,
For update
also a SP to update one table.

There is one class containing 2 functions, one for selection, one for the update,
The update function has all the GV field as parameter.

There is no Code behind.

Also,
the update statement in the DB finds a record in the update table by to fields, because the combinaison is the key. This same combination i set it to DataKeys name of the GV.

And i also bound the 2 key field from the data source to the grid view, but i set their visible propriety to False.

The update function in the DAL, is a simple call to the SP, using ADO class,
0
guru_samiCommented:
So you are using ObjectDataSource to do this update ? if so can you share the markup ..
0
Exploring ASP.NET Core: Fundamentals

Learn to build web apps and services, IoT apps, and mobile backends by covering the fundamentals of ASP.NET Core and  exploring the core foundations for app libraries.

Nyana22Author Commented:
yes i do use an ODS, and here is the markup,
By the way, in the GV, i have only one bound field, and all the other are template.

The user need to update or the bound field or this template containing the DD.

I tried to update the bound field , and its working good.
    <asp:ObjectDataSource ID="getDetailODS" runat="server" SelectMethod="getCountDetail"
        TypeName="CountDiscAL" UpdateMethod="upCountDetail">
        <SelectParameters>
            <asp:Parameter DefaultValue="2" Name="CountNo" Type="Int32" />
            <asp:Parameter Name="onlyDisc" Type="String" />
            <asp:Parameter Name="ifApp" Type="String" />
            <asp:Parameter Name="ifCorr" Type="String" />
            <asp:Parameter Name="itemSrch" Type="String" />
            <asp:Parameter Name="descSrch" Type="String" />
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="itemNo" Type="String" />
            <asp:Parameter Name="itemDesc" Type="String" />
            <asp:Parameter Name="PhysicalCount" Type="Decimal" />
            <asp:Parameter Name="MaxCurrent" Type="Decimal" />
            <asp:Parameter Name="Discrepency" Type="Decimal" />
            <asp:Parameter Name="dApproved" Type="String" />
            <asp:Parameter Name="AppReas" Type="String" />
            <asp:Parameter Name="dCorrected" Type="Int32" />
            <asp:Parameter Name="pCountID" Type="Int32" />
            <asp:Parameter Name="itemWarPK" Type="Int32" />
        </UpdateParameters>
    </asp:ObjectDataSource>

Open in new window

0
guru_samiCommented:
Try this:
1: Remove <asp:Parameter Name="AppReas" Type="String" />
from your UpdateParameters list
2: Add this parameter to the collection in your GV RowUpdating event handler like below:

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
    Dim ddl As DropDownList = DirectCast(GridView1.Rows(e.RowIndex).FindControl("DD1"), DropDownList)
    SqlDataSource1.UpdateParameters.Add("Age", ddl.SelectedValue)
End Sub
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
Nyana22Author Commented:
thanks,
it worked, but what's all that about?
i appreciate some clarification,
thanks
0
guru_samiCommented:
looks since your DDL is not Databounded you parameter was never assigned the value from the DDL implicitly
what the code does is assign the ddl selected value to the parameter explicitly like:
  SqlDataSource1.UpdateParameters.Add("Age", ddl.SelectedValue)
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.