12

我想List<MyIem>在后面的代码中将下拉列表绑定到 , 。

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

不使用 ObjectDataSource !

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

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

4

3 回答 3

5

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

<%@ 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"));
        }
    }
}
于 2009-05-24T16:19:25.347 回答
4

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

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

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

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

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”元素。

于 2010-08-23T09:15:18.573 回答
1

好吧,我面临着类似的问题。我注意到您正在尝试将其添加到其中,而这可能是您没有看到它的主要原因。

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

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

希望这可以帮助你。

于 2013-11-22T05:33:21.467 回答