如何将数据源绑定到List <Dictionary >?

我有一个存储字典条目列表的类。 我想从代码隐藏绑定到gridview的数据源。

字典类型的代码,表示ErrorMessage和失败字段。

public partial class FailedFields { private Dictionary Code_Error = new Dictionary(); public void AddFailedField(string field, string message) { Code_Error.Add(field, message); } public Dictionary GetFailedFields() { return Code_Error; } } 

字典条目列表的代码。

 public partial class ErrorFieldsList { private static List ErrorList = new List(); public void AddErrorField(Order.FailedFields errs) { ErrorList.Add(errs); } public List GetErrorMessages() { return ErrorList; } } 

在Visual Studio调试模式下运行,我可以看到列表中有错误列表,但我无法在gridview中显示它。 贝娄是众多方式中的一种(最有意义的方式)我试图将列表设置为数据源。

 ErrorBoxGridView.DataSource = FailedRecords.GetErrorMessages(). ; ErrorBoxGridView.DataBind(); 

知道我哪里错了吗? 另外,我不想在aspx页面中指定数据源,因为我只想在发生错误时显示它。

如果有兴趣为什么我这样做来存储错误消息,请看一下: 链接1

解决了这里 相关问题当我完成维基时,我将记录一个完整的项目。

我认为这不可能。 我要做的是:

  1. 而不是使用Dictionary定义一个包含两个字段和消息的公共属性的类
  2. 为该类创建对象数据源(使用Visual Studios“数据源”窗口)
  3. GetErrorMessages()返回List而不是Dictionary
  4. 将该列表分配给绑定源。

编辑
这是根据最新评论澄清事情。 你需要的是一个包含一个错误信息的类。 例如:

 public class ErrorInfo { public string Field { get { ... } } public string Message { get { ... } } } 

之后,在表单上放置一个BindingSource ,并(在代码中)将其DataSource属性设置为错误消息类列表 。 例如:

 private List errorList = new List(); errorList.Add(new ErrorInfo() { ... }); errorList.Add(new ErrorInfo() { ... }); errorList.Add(new ErrorInfo() { ... }); bindingSource.DataSource = errorList; 

数据网格视图绑定到BindingSource 。 你现在应该看到数据。 您可以手动创建列并将它们设置为ErrorInfo类的相应属性名称,但是您必须在代码中的某处将dataGridView.AutoCreateColumns设置为false

Databnary Databnary列表到GridView中

 List> resultSet = SOME List of Dictionaries... DataGridView.DataSource = resultSet.Select(x => new { fieldOne = x["key1"], fieldTwo = x["key2"] }).ToList(); DataGridView.DataBind(); 

现在你可以在DataGridView元素中绑定fieldOne和fieldTwo ……

请检查Link以获取准确的信息……

谢谢

.NET提供了一个方便的KeyValuePair <(Of <(TKey,TValue>)>)结构,可以在这种情况下使用。 这样你就不必定义自己的类了。 HTH。

或者您可以绑定到每个Dictionary项的Value&Key属性:

 ErrorBoxGridView.DataSource = FailedRecords.GetErrorMessages(); ErrorBoxGridView.DataTextField = "Value"; ErrorBoxGridView.DataValueField = "Key"; ErrorBoxGridView.DataBind();