FormView绑定中的DropDownList

时间:2009-05-24 14:25:48

标签: c# asp.net .net drop-down-menu formview

我想将dropdownlist绑定到List<MyIem>,  代码背后。

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

不使用ObjectDataSource!

如何将其绑定到下拉列表?在什么情况下?

SelectedValue='<%# Bind("ParentId") %>'也应该有效! (我的意思是下拉列表绑定应该在此之前发生!)

3 个答案:

答案 0 :(得分:4)

做了一个示例,它将设置DataBound事件中的下拉列表 这是标记
使用ddl的方法是在DataBound事件期间使用findcontrol()找到它 当您在DataBound事件中拥有控件时,您还可以将下拉列表绑定到List&lt;&gt;
希望这会有所帮助。

<%@ 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">

    <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>

这是背后的代码:

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"));
        }
    }
}

答案 1 :(得分:3)

假设有效值在数据库中,您可以使用其他DataSource填充DropDownList。看看这个视频:

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

它使用的是EntityDataSource而不是ObjectDataSource,但原则仍然有效。

如果您想要null的“(none)”类型选项,请参阅此页面上的“在模板字段中转换空”部分:

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

具体做法是:

<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>

注意“AppendDataBoundItems”属性和“asp:ListItem”元素。

答案 2 :(得分:0)

我正面临类似的问题。我注意到你试图将它添加到,而不是哪个可能是你没有看到它的主要原因。

然而,我已经研究了上面提供的两种解决方案,发现这对我有用: -

<EditItemTemplate>
<asp:DropDownList ID="ddlStream" runat="server" SelectedValue='<%# Bind("Stream") %>'>
                    <asp:ListItem>Common</asp:ListItem>
                    <asp:ListItem>Mechanical</asp:ListItem>
                    <asp:ListItem>Electronics</asp:ListItem>
                    </asp:DropDownList>
</EditItemTemplate>

<ItemTemplate>
<asp:Label runat="server" id="something" text='<%# Eval("Stream")%>'/>
</ItemTemplate>

希望这有助于你。