7

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

电话号码类型:

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

ETC

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

当我需要获取它们的列表时,我想我只需创建它们的 List<>,而不是使用两种不同类型的数据类型来获取相同的数据。

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

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

一:

我是不是很傻?这是获取数据并存储数据(键值对部分)的一种非常糟糕的方法吗?我应该将其全部存储在数据表中吗?我不喜欢把它全部放在数据表中。我让我的 DAL 接受我的 BLL,并尝试将所有内容封装为对象或List<>对象的,而不是所有内容的表。大多数情况下,这运作良好。

二:

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

编辑

正如下面所指出的,我是个白痴,只需要设置 DataValueField 和 DataKeyField。

要绑定下拉列表,我只需要做:

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

我没有立即看到它的原因是因为它没有出现在我的智能感知中,但是当我手动输入它时,它起作用了。

4

2 回答 2

31

使用 Dictionary<int, string> 并将 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();
于 2009-01-31T20:58:28.717 回答
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>
于 2013-11-10T14:59:55.500 回答