C# 如何将数据源绑定到列表<;字典<;字符串,字符串>>;?

C# 如何将数据源绑定到列表<;字典<;字符串,字符串>>;?,c#,list,dictionary,datasource,C#,List,Dictionary,Datasource,我有一个存储字典条目列表的类。我想从codebehind将其绑定到gridview的数据源 字典类型的代码,表示ErrorMessage和failed字段 public partial class FailedFields { private Dictionary<string, string> Code_Error = new Dictionary<string, string>(); public void AddFailedField(string

我有一个存储字典条目列表的类。我想从codebehind将其绑定到gridview的数据源

字典类型的代码,表示ErrorMessage和failed字段

public partial class FailedFields
{
    private Dictionary<string, string> Code_Error = new Dictionary<string, string>();
    public void AddFailedField(string field, string message)
    {
        Code_Error.Add(field, message);
    }
    public Dictionary<string, string> GetFailedFields()
    {
        return Code_Error;
    }
}
知道我哪里出错了吗? 另外,我不想在aspx页面中指定数据源,因为我只想在发生错误时显示它

如果有兴趣了解我为什么要这样做来存储错误消息,请查看以下内容:

此处已解决
当我在维基上完成时,我将记录一个完整的项目。

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

  • 不要使用
    字典
    定义一个包含字段和消息两个公共属性的类
  • 为该类创建对象数据源(使用Visual Studio的“数据源”窗口)
  • 使用
    GetErrorMessages()
    return
    List
    代替
    Dictionary
  • 将该列表分配给绑定源
  • 编辑
    这是根据最新的评论澄清事情。您需要的是一个包含一个错误信息的类。例如:

    public class ErrorInfo
    {
       public string Field { get { ... } }
       public string Message { get { ... } }
    }
    
    private List<ErrorInfo> errorList = new List<ErrorInfo>();
    errorList.Add(new ErrorInfo() { ... });
    errorList.Add(new ErrorInfo() { ... });
    errorList.Add(new ErrorInfo() { ... });
    
    bindingSource.DataSource = errorList;
    
    然后在表单上放置一个
    BindingSource
    ,并(在代码中)将其
    DataSource
    属性设置为错误消息类列表。例如:

    public class ErrorInfo
    {
       public string Field { get { ... } }
       public string Message { get { ... } }
    }
    
    private List<ErrorInfo> errorList = new List<ErrorInfo>();
    errorList.Add(new ErrorInfo() { ... });
    errorList.Add(new ErrorInfo() { ... });
    errorList.Add(new ErrorInfo() { ... });
    
    bindingSource.DataSource = errorList;
    
    private List errorList=new List();
    添加(新的ErrorInfo(){…});
    添加(新的ErrorInfo(){…});
    添加(新的ErrorInfo(){…});
    bindingSource.DataSource=errorList;
    

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

    .NET提供了一个方便的KeyValuePair)结构,可用于此类情况。这样,您就不必定义自己的类。HTH.

    或者您可以绑定到每个字典项的值和键属性:

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

    List resultSet=一些词典列表。。。
    DataGridView.DataSource=resultSet.Select(x=>new{
    fieldOne=x[“键1”],fieldTwo=x[“键2”]
    }).ToList();
    DataGridView.DataBind();
    
    现在您可以在DataGridView元素中绑定fieldOne和fieldTwo

    请检查链接以获得精确答案


    谢谢

    自动数据绑定无法做到这一点。您必须使用PropertyDescriptor,以便表知道如何将项转换为表。在MSDN中查找BindingList、PrimeStultRead和ItEdPyList.也考虑使用StrigEngy()代替字典.是的,使用简单的包装器比在属性描述符周围做简单.谢谢您的回答,但这不会按您的描述工作.我需要存储多对(字段名、ErrorMessage)。因此ErrorClass必须包含(FieldName,ErrorMessage)对的列表。但您给了我一个想法,放弃字典,使用List,其中ErrorClass表示(FieldName,ErrorMessage)对的列表。因此,我将以一个列表结束。最终,您将不得不将列表展平为一个列表,因为数据绑定需要显示项和“数据行”(在您的情况下,这将是字段的错误消息)之间的1:1关系。谢谢,我现在理解了这一部分。我现在将列表作为类的实例传递。所以我有一个列表对象,每个对象都是一个包含错误列表的类。。。但我仍然无法让它显示在网格中!
    List<Dictionary<string,string>> resultSet = SOME List of Dictionaries...
    DataGridView.DataSource = resultSet.Select(x => new { 
    fieldOne = x["key1"], fieldTwo = x["key2"] 
    }).ToList();
    DataGridView.DataBind();