【问题标题】:bind list to dropdownlist, what to do with value?将列表绑定到下拉列表,如何处理值?
【发布时间】:2012-01-25 23:51:35
【问题描述】:

我将一个列表绑定到一个下拉列表。但我想为每个列表项的值赋予其他值。

我有以下 ddl 和列表:

List<string>

运动、排球、橄榄球

<select>
    <option selected="selected" value="0"> Alle soorten</option>
    <option value="sport">sport</option>
    <option value="volleyball">volleyball</option>
    <option value="rugby">rugby</option>
</select>

但我想关注(值中的 ID)

<select>
    <option selected="selected" value="0"> Alle soorten</option>
    <option value="1">sport</option>
    <option value="2">volleyball</option>
    <option value="3">rugby</option>
</select>

我需要如何创建一个 List 才能获得上面的下拉列表。

谢谢

【问题讨论】:

  • 你是如何填写列表的,也许你也有 id,所以 KeyValue 对应该是你应该查看的内容
  • @V4Vendetta 啊哈,你的意思是字典?对于每个项目也是价值。 KeyValuepair 只是一项不是吗?

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


【解决方案1】:

如果您能够更改来源的类型,我建议您使用字典。你可以这样做:

var source = new Dictionary<int, string>();
source.Add(0, "Sports");
source.Add(1, "Football");
dropDown.DataSource = source;
dropDown.DataTextField = "Key";
dropDown.DataValueField = "Value";
dropDown.DataBind();

这会导致:

<select name="DdlCat2" id="DdlCat2" class="cats">
    <option selected="selected" value="Sports">0</option>
    <option value="Football">1</option>
</select>

稍后您可以像这样访问 ID 或值:

dropDown.SelectedItem.Value
dropDown.SelectedItem.Text

【讨论】:

    【解决方案2】:

    您可以像这样手动创建 ListItems:

    List<string> yourValues;
    for(var i=0; i < yourValues.Count; i++)
        YourDropDown.Items.Add(new ListItem(yourValues[i], i.ToString());
    

    或者您可以创建一个临时变量并将下拉列表与 linq 查询绑定,如下所示:

    List<string yourValues;
    var index = 0;
    YourDropDown.DataSource = yourValues.Select(x => new { Text = x, Value = index++ });
    YourDropDown.DataBind();
    

    并将其与标记结合起来:

    <asp:DropDownList ID="YourDropDown" DataValueField="Value" DataTextField="Text" runat="server" />
    

    【讨论】:

    • 简单干净。
    【解决方案3】:

    这是另一种方法。将 DataSet 表转换为列表并绑定到下拉列表。

    var filter = from dr in ds.Tables[0].AsEnumerable()
                where (dr.Field<int>("FilterID") == 1)
                select new
                {
                    FilterID = dr.Field<int>("FilterID"),
                    FilterName = dr.Field<string>("FilterName")
                };
    
    ddlSample.DataSource = filter;
    ddlSample.DataTextField = "FilterName";
    ddlSample.DataValueField = "FilterID";
    ddlSample.DataBind();
    filter = null; // null the var
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多