4

我有一个存储字典条目列表的类。我想将它绑定到来自代码隐藏的 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;
    }
}

字典条目列表的代码。

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 页面中指定数据源,因为我只想在发生错误时显示它。

如果对我为什么要这样做来存储错误消息感兴趣,请查看:链接 1

在此处解决 相关问题 我将在完成 wiki 后记录一个完整的项目。

4

4 回答 4

3

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

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

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

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

之后,您将 aBindingSource放在表单上并(在代码中)将其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.AutoCreateColumnsfalse代码中的某个位置。

于 2009-08-17T08:56:17.947 回答
1

将字典的数据绑定列表到 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 ...

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

谢谢

于 2013-06-25T11:49:56.767 回答
0

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

于 2009-09-23T20:04:31.403 回答
0

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

ErrorBoxGridView.DataSource = FailedRecords.GetErrorMessages();
ErrorBoxGridView.DataTextField = "Value";
ErrorBoxGridView.DataValueField = "Key";
ErrorBoxGridView.DataBind();
于 2012-10-25T11:26:21.473 回答