gridview绑定下拉列表到List <keyvaluepair <int,string =“”>&gt; </keyvaluepair <int,>

时间:2009-01-31 20:45:38

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

我的数据库中有许多表,它们包含对键值对的引用:

电话号码类型:

  • 1 - 主页
  • 2 - 工作
  • 3 - 手机
  • 4 - 传真

所以我有一个表的类型,当它们在其他表中使用时,它们将int值作为外键引用。当我把它们拉出来时,我一直把它们作为keyvaluepair<int, string>项目存储在正在使用它们的类中。

当我需要获取它们的列表时,我想我会创建一个List&lt;&gt;而不是使用两种不同类型的数据类型来获得相同的数据。

当我使用edittemplate位时,当我需要在gridview中填充下拉列表时,我的问题已经到了。如果我使用数据源将其拉出来,它将在文本中写入[1 Home],而不是将int作为值,将Home作为要显示的文本。

我想我真的有一个多部分问题。

一:

我是傻瓜吗?这是一个非常糟糕的方法来获取数据并存储它(keyvaluepair部分)?我应该将它全部存储在数据表中吗?我不喜欢把它全部放在数据表中。我把我的DAL带到我的BLL并尝试将所有内容封装为对象或List<>的对象而不是所有内容的表。大部分时间都运作良好。

二:

如果我使用某个对象而不是数据表绑定到下拉列表的objectdatasource,如何设置当前选择的值,而不是只选择列表中的第一个项?

修改

如下所述,我是一个白痴,只需要设置DataValueField和DataKeyField。

要让下拉列表绑定,我必须这样做:

SelectedValue='<%# DataBinder.Eval(Container, "DataItem.PhoneType.Key") %>'

之所以我没有立刻看到它是因为它没有出现在我的intellisense中,而是当我手动键入它时,它起作用了。

2 个答案:

答案 0 :(得分:32)

使用字典&lt; int,string&gt;并将DropDown DataValueField设置为 Key ,将DataTextField设置为 Value

    // A sample dictionary:
    var dictionary = new Dictionary<int, string>();
    dictionary.Add(1, "Home");
    dictionary.Add(2, "Work");
    dictionary.Add(3, "Mobile");
    dictionary.Add(4, "Fax");

    // Binding the dictionary to the DropDownList:
    dropDown.DataTextField = "Value";
    dropDown.DataValueField = "Key";
    dropDown.DataSource = dictionary;  //Dictionary<int, string>
    dropDown.DataBind();

答案 1 :(得分:0)

及其我的自定义方法

// Define enum
public enum ServiceType : int
{
    MinimumService = 1,
    NormalService = 2,
    VipService = 99
}

// custom method to get my custom text name for each enum type
public string GetServiceTypeName(ServiceType serviceType)
{
    string retValue = "";
    switch (serviceType)
    {
        case ServiceType.Print:
            retValue = "We have some services for you";
            break;
        case ServiceType.BookBinding:
            retValue = "We ar glad to meet you";
            break;
        default:
            retValue = "We alywas are ready to make you happy";
            break;
    }
    return retValue;
}

// making dictionary (key and value) for dropdown datasource
public static Dictionary<string, int> GetAllServiceTypeName()
{
    Dictionary<string, int> dataSource = new Dictionary<string, int>();

    foreach (int item in Enum.GetValues(typeof(ServiceType)))
        dataSource.Add(GetServiceTypeName((ServiceType)item), item);

    return dataSource;
}


   // bind the dropdown to dictionary
    ddlServiceType.DataSource = GetAllServiceTypeName();
    ddlServiceType.DataBind();

   // aspx markup code sample
    <asp:DropDownList ID="ddlServiceType" runat="server" 
        DataTextField="Key" DataValueField="Value">
    </asp:DropDownList>