使用Dictionary绑定下拉列表

时间:2011-03-25 06:48:56

标签: c# asp.net

我将词典绑定到下拉列表。

比如说我在字典中有以下项目:

{"Test1", 123}, {"Test2", 321} 

我希望下拉文字采用以下格式:

Test1 - Count: 123
Test2 - Count: 321

我正沿着以下道路走,没有运气:

MyDropDown.DataTextFormatString = string.Format("{0} - Count: {1}", Key, Value);

谢谢:)

3 个答案:

答案 0 :(得分:5)

您可以在字典上使用LINQ创建投影视图,并创建一个匿名类型来保存自定义格式。

Dictionary<string, int> values = new Dictionary<string, int>();
values.Add("First", 321);
values.Add("Second", 456);
values.Add("Third", 908);


var displayView = from display in values
                    select new { DisplayText = display.Key + " Count: " + display.Value };

DropDownList1.DataSource = displayView;
DropDownList1.DataTextField = "DisplayText";
DropDownList1.DataBind();

答案 1 :(得分:1)

我认为DropDownList不支持DataTextFormatString,就像你想要的那样连接一个String。据我所知,您只能使用格式字符串表示数字和日期。 (例如,请参见此处:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.datatextformatstring.aspx

您可以按照ChristiaanV建议的方式(匿名类型)执行此操作,也可以使用您自己的POCO class(仅包含属性的类)。
请注意,使用匿名类型的范围有限。您不能在BusinessLayer-Assembly中使用它们并让GUI-Assembly使用结果,因为从方法返回匿名类型的能力非常有限。

我建议你这样做:

public class MyPOCO
{
  public int MyPrimaryKey {get;set;}
  public String DisplayString {get;set;}
}

在代码中创建List<MyPOCO>并将其绑定到DataSource属性。 将DataValueField设置为MyPrimaryKey,将DataTextField设置为DisplayString

如果您在回发上遇到数据绑定问题,可以执行以下操作:

  1. 创建一个返回List<MyPOCO>
  2. 的方法
  3. 创建一个ObjectDataSource并使用向导选择您在1中创建的方法。
  4. 将ObjectDataSource的ID分配给DropDownList的DataSourceID

答案 2 :(得分:1)

你不能在

中使用string.Format
  

DataTextFormatString

请尝试以下代码。

Dictionary<string, int> s = new Dictionary<string, int>();
        s.Add("Test1", 123);
        s.Add("Test2", 321);

        foreach(KeyValuePair<string,int> temp in s)
        {
            DropDownList1.Items.Add(new ListItem(string.Format("{0} - Count: {1}", temp.Key, temp.Value),temp.Value.ToString()));
        }