如何将数据源绑定到List <dictionary <string,string =“”>&gt;?</dictionary <string,>

时间:2009-08-17 08:40:57

标签: c# list dictionary datasource

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

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

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;
    }
}

词典条目列表代码。

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

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

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

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

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

解决此问题 Related Question 当我完成维基时,我将记录一个完整的项目。

4 个答案:

答案 0 :(得分:3)

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

  1. 而不是使用Dictionary<string, string>定义包含字段和消息
  2. 的两个公共属性的类
  3. 为该类创建对象数据源(使用Visual Studios“数据源”窗口)
  4. GetErrorMessages()返回List<ErrorClass>而不是Dictionary
  5. 将该列表分配给绑定源。
  6. 修改
    这是根据最新评论澄清事情。您需要的是一个类,其中包含一个错误的信息。例如:

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

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

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

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

答案 1 :(得分:1)

Databind List of Dictionnary into a GridView

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

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

请检查链接以获取准确的答案......

由于

答案 2 :(得分:0)

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

答案 3 :(得分:0)

或者你可以绑定到Value&amp;每个词典项的关键属性:

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