在ASP.NET中本地化动态绑定的DropDownList

时间:2015-02-16 09:44:15

标签: c# asp.net resx

我有一个下拉列表,它与数据库表“国家/地区”绑定 下拉列表将 countryname 列作为其datatextfield,将 countrycode 作为datavaluefield。
假设该表有3个条目,其各自的列值如下所示。

印度 IN
德国 DE
美国美国

我正在将文化改为 de-DE
我知道将resx文件用于单个静态文本。 现在,如何将多个datatextfield项目同时本地化为 de-DE

1 个答案:

答案 0 :(得分:2)

要执行此操作,您需要将表行的集合与值上的资源文件中的值相关联,然后将数据打包到您将DropDownList绑定到的自定义类型中。所以:

var tableRows = table.Rows.Cast<DataRow>();
var resourceStrings = YourResourceClass.ResourceManager
        .GetResourceSet(culture: CultureInfo.CurrentUICulture,
            createIfNotExists: false,
            tryParents: true)
        .Cast<DictionaryEntry>();

var data = tableRows
        .Join(resourceStrings,
            row => row["countrycode"].ToString(),
            resource => resource.Key,
            (row, resource) => new KeyValuePair<string, string>(
                row["countrycode"].ToString(),
                resource.Value.ToString()))
        .ToArray();

现在,将DropDownList的绑定属性更改为:

ddl.DataTextField = "Value";
ddl.DataValueField = "Key";

绑定数据源:

ddl.DataSource = data;

修改

要在不使用LINQ的情况下获得相同的结果,您需要将资源加载到字典中,然后遍历县表以构建数据源;像这样的东西:

var resources = new Dictionary<string,string>();
var resourceSet = YourResourceClass.ResourceManager.GetResourceSet(
    CultureInfo.CurrentUICulture, false, true);
foreach(DictionaryEntry kvp in resourceSet)
{
    resources[kvp.Key] = kvp.Value.ToString();
}

var dataSource = new List<KeyValuePair<string, string>>();
foreach(DataRow in table.Rows)
{
    var countryCode = row["countrycode"].ToString();
    if(resources.ContainsKey(countryCode))
    {
        dataSource.Add(new KeyValuePair<string, string>(
            countryCode,
            resources[contryCode]));
    }
}

接下来,将dataSource绑定到您的DropDownList,然后全部设置!