如何将数据源绑定到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
解决了这里 相关问题当我完成维基时,我将记录一个完整的项目。
我认为这不可能。 我要做的是:
- 而不是使用
Dictionary
定义一个包含两个字段和消息的公共属性的类 - 为该类创建对象数据源(使用Visual Studios“数据源”窗口)
- 让
GetErrorMessages()
返回List
而不是Dictionary
- 将该列表分配给绑定源。
编辑
这是根据最新评论澄清事情。 你需要的是一个包含一个错误信息的类。 例如:
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();