C# 如何将数据源绑定到列表<;字典<;字符串,字符串>>;?
我有一个存储字典条目列表的类。我想从codebehind将其绑定到gridview的数据源 字典类型的代码,表示ErrorMessage和failed字段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
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页面中指定数据源,因为我只想在发生错误时显示它
如果有兴趣了解我为什么要这样做来存储错误消息,请查看以下内容:
此处已解决
当我在维基上完成时,我将记录一个完整的项目。我认为这是不可能做到的。我要做的是:
字典
定义一个包含字段和消息两个公共属性的类GetErrorMessages()
returnList
代替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();