How do I bind a field from a sql server to a dropdownlist

Working on a web site
have a gridview and one of the columns is a dropdownlist
2 items: none and pto
When you open the web page it should display what you selected the last time you opened it.
all of the bound text boxes work, but the dropdownlist shows the first item of the list and not the item choosen and stored in the sql database.
the web page reads the value for every other column in dataview, why not the dropdownlist?
Do I have to do some time of binding between the sql and the dropdownlist?

thanks gair

 <div>
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True"  
            AllowSorting="fALSE" AutoGenerateColumns="False"  
            DataSourceID="SqlDataSource1">  
            <Columns>  
                <asp:BoundField DataField="WORKDATE" HeaderText="DATE" ReadOnly="True"  />                  
                <asp:BoundField DataField="STARTDAY" HeaderText="DAY"  />
                   
                <asp:BoundField DataField="STARTTIME" HeaderText="IN"  />
                   
                <asp:BoundField DataField="ENDTIME" HeaderText="OUT"   />
                     
                <asp:BoundField DataField="STARTLUNCH" HeaderText="LUNCH"  />
                   
                <asp:BoundField DataField="ENDLUNCH" HeaderText="LUNCH BACK"  />  
                <asp:BoundField DataField="PTODETAIL" HeaderText="DETAIL PTO"  ReadOnly="True" />
                 
                 <asp:TemplateField HeaderText="Pto Detail">
                        <ItemTemplate>
                            <asp:DropDownList ID="DropDownList1" DataTextField="PTO"  runat="server">
                           
                            <asp:ListItem>NONE</asp:ListItem>
                            <asp:ListItem>PTO</asp:ListItem>
                            </asp:DropDownList>
                    </ItemTemplate>
                   
            </asp:TemplateField>
           
               
                <asp:BoundField DataField="PTOPAID" HeaderText="PTO HR" />  
                     
               
                  <asp:TemplateField HeaderText="Company PTO">
                        <ItemTemplate>
                            <asp:DropDownList ID="DropDownList2" DataTextField="COMPANYPTO"  runat="server" DataValueField="COMPANYPTO">
                            <asp:ListItem>NONE</asp:ListItem>
                            <asp:ListItem>Paid Holiday</asp:ListItem>
                            <asp:ListItem>Bereviament</asp:ListItem>
                            </asp:DropDownList>
                    </ItemTemplate>
                   
            </asp:TemplateField>  
                <asp:BoundField DataField="COMPANYPTOPAID" HeaderText="COMPANY HRS"  />  
                   <asp:BoundField DataField="SYMITARCODE" HeaderText="ESPY CODE"  />
               
          <asp:TemplateField HeaderText="EDIT">
                        <ItemTemplate>
                            <asp:Button ID="Button3" runat="server" Text="edit" />
                    </ItemTemplate>
              </asp:TemplateField>
            </Columns>  
       
        </asp:GridView>      

                   
           
        <asp:Button ID="Button1" runat="server" Text="update" />
        <asp:Button ID="Button2" runat="server" Text="cancel" />    
                   
                 
             
    <asp:sqldatasource ID="Sqldatasource1" runat="server"
            ConnectionString="<%$ ConnectionStrings:wages1SQLConnectionString %>"
            SelectCommand="SELECT [WORKDATE], [STARTDAY], [STARTTIME], [ENDTIME], [STARTLUNCH], [ENDLUNCH], [PTODETAIL], [PTOPAID], [PTOUNPAID], [COMPANYPTO], [COMPANYPTOPAID], [SYMITARCODE] FROM [EmployeeAccumInfo]"></asp:sqldatasource>
    </div>
javagairAsked:
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.

Kyle AbrahamsSenior .Net DeveloperCommented:
<asp:DropDownList ID="DropDownList1" DataTextField="PTO"  runat="server" SelectedValue='<%# Bind("<YOUR FIELD>") %>'>

Replace your field with the field you need to bind from Sqldatasource1

Resource:
http://weblogs.asp.net/gurusarkar/how-to-set-selectedvalue-of-dropdownlist-in-a-gridview
0
javagairAuthor Commented:
this one gives error
<asp:TemplateField HeaderText="Pto Detail">
                        <ItemTemplate>
                            <asp:DropDownList ID="DropDownList1" runat="server" SelectedValue="<%# Bind("PTODETAIL") %>">
                           
                            <asp:ListItem>NONE</asp:ListItem>
                            <asp:ListItem>PTO</asp:ListItem>
                            </asp:DropDownList>
                    </ItemTemplate>
                   
            </asp:TemplateField>
this one does not
 <asp:TemplateField HeaderText="Company PTO" >
                        <ItemTemplate>
                            <asp:DropDownList ID="DropDownList2" runat="server" SelectedValue="<%# Bind("COMPANYPTO") %>">
                            <asp:ListItem>NONE</asp:ListItem>
                            <asp:ListItem>Paid Holiday</asp:ListItem>
                            <asp:ListItem>Bereviament</asp:ListItem>
                            </asp:DropDownList>
                    </ItemTemplate>
                   
            </asp:TemplateField>  
if I don't change the single quotes to double it errors immediately, am I doing something wrong, regardless with the double quotes one gives no error that the other does.
 
I do not see any difference.

gair
0
Kyle AbrahamsSenior .Net DeveloperCommented:
From the resource as well:

you can do the following:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType== DataControlRowType.DataRow)
    {
        DataRowView drv = e.Row.DataItem as DataRowView;
        DropDownList ddl1 = e.Row.FindControl("DropDownList1") as DropDownList;
        if(ddl1 != null)
        {
            //Get the data from DB and bind the dropdownlist
            //you may need to double check to ensure you have a value.
             if (string.IsNullOrEmpty(drv["PTODETAIL"].ToString())
                //set a default
              else
                 ddl1.SelectedValue = drv["PTODETAIL"].ToString();
        }
    }
}

Open in new window

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
javagairAuthor Commented:
ACTUALLY NEITHER WORK


this is the runtime error that occurs:
[ArgumentOutOfRangeException: 'DropDownList1' has a SelectedValue which is invalid because it does not exist in the list of items.

THIS IS MY TEST CODE
Parameter name: value]
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Button ID="Button3" runat="server" Text="edit"  />  
    <asp:GridView ID="GridView1" runat="server" AllowPaging="False"  
            AllowSorting="fALSE" AutoGenerateColumns="False"  
            DataSourceID="SqlDataSource1">  
            <Columns>  
                <asp:BoundField DataField="WORKDATE" HeaderText="DATE" ReadOnly="True"  ApplyFormatInEditMode="False" />                  
                <asp:BoundField DataField="STARTDAY" HeaderText="DAY" ReadOnly="True"  />                
 
         <asp:TemplateField HeaderText="in">
            <ItemTemplate>
              <asp:Label runat="server" ID="STARTTIME" Text="<%#Eval(“startTime”) %>" />
            </ItemTemplate>

            <EditItemTemplate>
            <asp:TextBox runat="server" ID="StartTime" Text="<%#Eval(“starttime”) %>" />
            <asp:RequiredFieldValidator runat="server" ID="rfStartTime"  ControlToValidate="StartTime" ValidationGroup="var1" ErrorMessage=" " />

            </EditItemTemplate>

         </asp:TemplateField>
               
                <asp:BoundField DataField="ENDTIME" HeaderText="OUT"  ReadOnly="True"  ApplyFormatInEditMode="True" />
                     
                <asp:BoundField DataField="STARTLUNCH" HeaderText="LUNCH" ReadOnly="True"  ApplyFormatInEditMode="True" />
                   
                <asp:BoundField DataField="ENDLUNCH" HeaderText="LUNCH BACK"  ApplyFormatInEditMode="True" />  
               
                 <asp:TemplateField HeaderText="Pto Detail">
                        <ItemTemplate>
                            <asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Bind("COMPANYPTO") %>'>
                           
                            <asp:ListItem>NONE</asp:ListItem>
                            <asp:ListItem>PTO</asp:ListItem>
                            </asp:DropDownList>
                    </ItemTemplate>
                   
            </asp:TemplateField>
           
                 
               
                <asp:BoundField DataField="PTOPAID" HeaderText="PTO HR" ReadOnly="True"  ApplyFormatInEditMode="True" />  
                  <asp:BoundField DataField="PTOUNPAID" HeaderText="PTO UnPaid" ReadOnly="True"  ApplyFormatInEditMode="True" />    
               
                  <asp:TemplateField HeaderText="Company PTO" >
                        <ItemTemplate>
                            <asp:DropDownList ID="DropDownList2" runat="server" SelectedValue='<%# Bind("COMPANYPTO") %>'>
                            <asp:ListItem>NONE</asp:ListItem>
                            <asp:ListItem>Paid Holiday</asp:ListItem>
                            <asp:ListItem>Bereviament</asp:ListItem>
                            </asp:DropDownList>
                    </ItemTemplate>
                   
            </asp:TemplateField>  
                <asp:BoundField DataField="COMPANYPTOPAID" HeaderText="COMPANY HRS" ReadOnly="True"  ApplyFormatInEditMode="True" />  
                   <asp:BoundField DataField="SYMITARCODE" HeaderText="ESPY CODE" ReadOnly="True"  ApplyFormatInEditMode="True" />
               
         
            </Columns>  
       
        </asp:GridView>      

                   
         
        <asp:Button ID="Button1" runat="server" Text="update" />
        <asp:Button ID="Button2" runat="server" Text="cancel" />    
                   
                 
             
    <asp:sqldatasource ID="Sqldatasource1" runat="server"
            ConnectionString="<%$ ConnectionStrings:wages1SQLConnectionString %>"
            SelectCommand="SELECT [WORKDATE], [STARTDAY], [STARTTIME], [ENDTIME], [STARTLUNCH], [ENDLUNCH], [PTODETAIL], [PTOPAID], [PTOUNPAID], [COMPANYPTO], [COMPANYPTOPAID], [SYMITARCODE] FROM [EmployeeAccumInfo]"></asp:sqldatasource>
    </div>
    </form>
</body>
</html>

value is the same as what I am bringing out of database

thanks

gary
0
Kyle AbrahamsSenior .Net DeveloperCommented:
Meaning that you're trying to set the selectedvalue of something that's not there.

Use the second approach for now and see what you're pulling from the database.

Also for your list items and note that value can differ from the text:
  <asp:ListItem Text="None" Value="None" />
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
Web Applications

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.