【发布时间】:2009-11-05 19:58:21
【问题描述】:
我正在尝试将集合(从 BindingList 继承)绑定到 DataGridView。网格标题显示得很好,我得到了我期望的行数。但是,单元格是空的。有没有其他人有这个问题?如果是这样,您是如何解决的?我和其他有同样问题的人谈过,但他们不记得他们是如何解决的。我试图创建一个显示问题但没有任何运气的简单版本。所以很抱歉,我没有包含任何代码。
编辑#1:
我认为这段代码不会有帮助,但以防万一。我已经简化了一些事情,以防止不得不勾勒出我们代码的 47 层。但就像我说的,我不能用这样一个非常简单的例子来重现问题。我并不是真的想要代码分析——只是那些遇到这个问题的人的智慧之言。当然,我不是唯一一个。
public interface ISearchResultCollection : IList<ISearchResult>
{
...
}
public class SearchResultCollection : BindingList<ISearchResult>, ISearchResultCollection
{
...
}
public interface ISearchResult
{
ILineNum LineNumber {get; set;}
string Text {get; set;}
}
public class SearchResult
{
...
}
ISearchResultCollection results = objectToSearch.Find("searchstring");
dataGridView1.DataSource = results;
编辑#2:
我想我已经领先了。我的接口上所有代表项目 (ISearchResult) 的公共属性也是接口类型。我添加了一个字符串属性,它的数据神奇地出现了。因此,在上面的示例中,文本列的数据将显示出来。但是,LineNumber 列的数据不会,因为它是接口类型 (ILineNum)。我想 ToString() 将被调用来填充这些网格。现在有什么想法吗?
【问题讨论】:
-
您能否提供更多您尝试绑定的对象的示例?例如,“从 BindingList 继承的集合”是什么样的?您如何将对象绑定到 DataGridView?直接还是通过 BindingSource?你确定你的对象里面有数据吗?如果没有代码进行分析,这很难回答。 :)
-
我做了一些编辑以包含代码的外壳。我不确定它会有多大帮助。我已验证调试器中有数据。
标签: c# collections binding