NameValueCollection の代わりに Dictionary<string,string> を使用できますか。Dictionary<T,T> は IEnumerable を実装しているため、次のように LINQ を使用できます。
resultGV.DataSource = from item in nvpDictionary
select new { Key = item.Key, Value = item.Value };
resultGV.DataBind();
[編集] 実際には、辞書を次のように直接使用できる場合があります。
resultGV.DataSource = nvpDictionary;
resultGV.DataBind();
キー/値が希望どおりにマップされない場合は、いつでも LINQ に戻ることができます。LINQ では、フィールドの名前を好きな名前に変更することもできます。
[編集] Dictionary<T,T> を使用するように変更できない場合は、メソッドで NameValueCollection のコピーを Dictionary として作成し、それにバインドします。
private void BindList(NameValueCollection nvpList)
{
Dictionary<string,string> temp = new Dictionary<string,string>();
foreach (string key in nvpList)
{
temp.Add(key,nvpList[key]);
}
resultGV.DataSource = temp;
resultGV.DataBind();
}
これを頻繁に行う場合は、ディクショナリに変換する拡張メソッドを記述して、そのように使用できます。
public static class NameValueCollectionExtensions
{
public static Dictionary<string,string> ToDictionary( this NameValueCollection collection )
{
Dictionary<string,string> temp = new Dictionary<string,string>();
foreach (string key in collection)
{
temp.Add(key,collection[key]);
}
return temp;
}
}
private void BindList(NameValueCollection nvpList)
{
resultGV.DataSource = nvpList.ToDictionary();
resultGV.DataBind();
}