tags:

views:

2617

answers:

3

I want to bind dropdownlist to List<MyIem>, in code behind.

 <asp:DropDownList ID="listCategories"  runat="server" Height="20px"   CssClass="CategoryDropList" SelectedValue='<%# Bind("ParentId") %>' AutoPostBack="false" Width="300px">

Without using ObjectDataSource !

How can I Bind it to the dropdown list? In what event?

Also the SelectedValue='<%# Bind("ParentId") %>' should work!!! (I mean the dropdownlist binding should accure before this!!!)

+3  A: 

Made an example which will set the dropdown in the DataBound event.
Here is the markup
The way to use the ddl, is to find it with findcontrol() during DataBound event.
When you have the control in the DataBound event, you can also bind the dropdown to your List<>
Hope this helps.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>

        </div>
        <asp:FormView ID="FormView1" runat="server" ondatabound="FormView1_DataBound">
            <ItemTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server">
                    <asp:ListItem>One</asp:ListItem>
                    <asp:ListItem>Two</asp:ListItem>
                    <asp:ListItem>Three</asp:ListItem>
                </asp:DropDownList>

            </ItemTemplate>
        </asp:FormView>
        </form>
    </body>
    </html>

Here is the code behind:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            List<string> list = new List<string>();
            list.Add("Some");
            list.Add("Other");

            FormView1.DataSource = list; //just to get the formview going

            FormView1.DataBind(); 

        }

        protected void FormView1_DataBound(object sender, EventArgs e)
        {
            DropDownList ddl = null;
            if(FormView1.Row != null)
                ddl = (DropDownList) FormView1.Row.FindControl("DropDownList1");
            ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue("Two"));
        }

    }
}
Kb
But I also need to populate DropDownList in code behind, and not like <asp:ListItem>One</asp:ListItem>
markiz
Don't know if this is important but dropdownlist is in EditTemplate of FormView.
markiz
You could populate the DropDownList in the DataBound event. Once you have the ddl reference: Get the data as List<ListItem>, set the ddl.DataSource to the list, and do ddl.DataBind(). If you are in EditTemplate, make sure you have unique IDs of the ddl across edit an item template. Hope you make it work.
Kb
I can't populate it in DataBound Event because it will be to late for SelectedValue='<%# Bind("ParentId") %>' to work.
markiz
I see your point. One suggestion could be to could populate in DataBound and set SelectedValue in DataBound event in code behind and not in the form.
Kb
But if I won't have SelectedValue='<%# Bind("ParentId") %>' on the form, will I be able to Bind the selected value back to the database?(When I click on update button in FormView)
markiz
If two way databind doesn't work (as it does in Winforms - do not think ASP.Net has two-way databinding), you could do FindControl when you press the update button.
Kb
@markiz: Here is an article about two-way binding: http://msdn.microsoft.com/en-us/magazine/cc163505.aspx
Kb
A: 

Please, does the last comment answer your question, markiz? If it doesn't, have you found an answer? I'm in the same case as you. Thanks in advance. MC.

Well, finally I've found a solution using a custom DropDownList:<asp:FormView ID="FV_Solicitant" runat="server" DataSourceID="ODS_Solicitant"> <EditItemTemplate><ControlPropi:DropDownList_Pais ID="DropDownList_Pais1" runat="server" DataTextField="Desc" DataValueField="PAIS" SelectedValue='<%# Bind("PAIS") %>'></ControlPropi:DropDownList_Pais>Public Class DropDownList_Pais Inherits DropDownList Public Overrides Sub DataBind() Do the Me.Items.Add( ... ) MyBase.DataBind() End SubHope it helps someone. MC.
A: 

You can populate the DropDownList with another DataSource, assuming the valid values are in the database. Check out this video:

http://msdn.microsoft.com/en-us/data/cc546554.aspx

It's using an EntityDataSource instead of an ObjectDataSource, but the principle should still work.

If you want a "(none)" type option for null, see section "Converting Null in Template Fields" on this page:

http://msdn.microsoft.com/en-us/library/ms366709.aspx

Specifically:

<asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource2"
    DataTextField="Name" DataValueField="EmployeeID"
    SelectedValue='<%# Bind("ReportsTo") %>' AppendDataBoundItems="True">
        <asp:ListItem Selected="True" Value="">(none)</asp:ListItem>
</asp:DropDownList>

Notice the the "AppendDataBoundItems" attribute and the "asp:ListItem" element.

Pixel