【问题标题】:Asp.net - Add blank item at top of dropdownlistAsp.net - 在下拉列表顶部添加空白项
【发布时间】:2010-09-20 23:47:14
【问题描述】:

为什么下拉菜单没有首先显示我的空白项?这是我所拥有的

drpList.Items.Add(New ListItem("", ""))

With drpList
    .DataSource = myController.GetList(userid)
    .DataTextField = "Name"
    .DataValueField = "ID"
    .DataBind()
End With

编辑~我绑定到一个通用列表,这可能是罪魁祸首吗?

【问题讨论】:

标签: asp.net drop-down-menu


【解决方案1】:

看起来您正在添加一个空白项,然后是数据绑定,这将清空列表;尝试在数据绑定后插入空白项

【讨论】:

  • 当我这样做时,空白行出现在底部。
  • 您可以指定要插入的索引。看看 JasonS 的解决方案。
  • @[Saif Khan]:如果这不起作用,请将空白行插入数据源,然后进行数据绑定
【解决方案2】:

数据绑定是在您添加空白列表项后进行的,它会替换已经存在的内容,您需要从控制器将空白项添加到列表的开头,或在数据绑定后添加。

编辑:

从 ASP.Net 2.0 开始快速搜索后,有一个“AppendDataBoundItems”true 属性,您可以将其设置为...附加数据绑定项。

详情见

http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=281

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.appenddatabounditems.aspx

【讨论】:

  • 一个认为您需要注意的是,通过一遍又一遍地附加相同的数据,您的下拉列表会在每次回发后增长。
  • 是空白项不存在,还是存在但未选中?
  • 如果您的 .aspx 标记中有空白,然后绑定在后面的代码中,这将起作用。
【解决方案3】:

进行数据绑定,然后添加以下内容:

Dim liFirst As New ListItem("", "")
drpList.Items.Insert(0, liFirst)

【讨论】:

    【解决方案4】:

    数据绑定后:

    drpList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
    drpList.SelectedIndex = 0;
    

    【讨论】:

    • 另外,您可以实例化一个 ListItem,将其 Selected 属性设置为 true,然后将其插入到 drpList 中。
    • 这可能有助于那些寻找使用 sqlDataSource 数据的答案的人 在我的情况下,我还必须添加 drpList.AppendDataBoundItems = true;将其绑定到 Page_Load 方法中的当前数据
    【解决方案5】:

    我认为更好的方法是先插入空白项,然后像你一直在做的那样绑定数据。但是您需要设置列表控件的AppendDataBoundItems 属性。

    我们使用以下方法将任意数据源绑定到任意列表控件...

    public static void BindList(ListControl list, IEnumerable datasource, string valueName, string textName)
    {
        list.Items.Clear();
        list.Items.Add("", "");
        list.AppendDataBoundItems = true;
        list.DataValueField = valueName;
        list.DataTextField = textName;
        list.DataSource = datasource;
        list.DataBind();
    }
    

    【讨论】:

      【解决方案6】:

      如“Whisk”所说,诀窍在于“AppendDataBoundItems”属性

      protected void Page_Load(object sender, EventArgs e)
      {
          if (!IsPostBack)
          {
              DropDownList1.AppendDataBoundItems = true;
              DropDownList1.Items.Insert(0, new ListItem(String.Empty, String.Empty));
              DropDownList1.SelectedIndex = 0;
          }
      }
      

      感谢“打扫”

      【讨论】:

        【解决方案7】:

        简单

        终于

        ddlProducer.Items.Insert(0, "");
        

        【讨论】:

          【解决方案8】:

          您可以使用AppendDataBoundItems=true轻松添加:

          <asp:DropDownList ID="drpList" AppendDataBoundItems="true" runat="server">
              <asp:ListItem Text="" Value="" />
          </asp:DropDownList>
          

          【讨论】:

          • VS 不喜欢
            标签,没有它它对我有用。这是一个很干净的选项,我不知道为什么它没有更多的选票。
          • 工作就像一个魅力。感谢您提供设计时解决方案。
          • 别忘了设置 Selected="true"
          【解决方案9】:

          ddlCategory.DataSource = ds;
          ddlCategory.DataTextField = "CatName";
          ddlCategory.DataValueField = "CatID";

          第 1 步:

          ddlCategory.Items.Add(new ListItem("--please select--", "-1"));
          ddlCategory.AppendDataBoundItems = true;
          ddlCategory.SelectedIndex = -1;

          ddlCategory.DataBind();

          第 2 步:

          ddlCategory.Items.Insert(0, new ListItem("-- please select --", "0"));

          (测试正常)

          【讨论】:

            【解决方案10】:

            您还可以将空白选择与具有内容的选择结合起来:

            select '' value, '' name
            union
            select value, name from mytable
            

            【讨论】:

            • 回首往事,我不会推荐这种方法,除非只是作为一种替代方法。为了灵活性,我喜欢这个事件 (OnDataBound="mydropdown_DataBound"),但在我目前的情况下,为了简单起见,我采用 (AppendDataBoundItems="true")。
            猜你喜欢
            • 2010-11-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多