gpt4 book ai didi

c# - 将 DataGridView 绑定(bind)到可能包含零个元素的 IBindingList

转载 作者:行者123 更新时间:2023-11-30 16:23:17 25 4
gpt4 key购买 nike

在 VS 2008 (.Net 3.5) 中使用 C# WinForms

我正在尝试将可能为空的列表绑定(bind)到数据网格。

如果列表包含元素,并且启用了 AutoGenerateColumns,则数据将绑定(bind)到列表并且一切正常。

但是,如果列表为空,或者列表变为空(通过删除最后一个元素),则什么也不会显示,只有灰色背景。

如果我手动创建列,例如:

                if (m_DataGrid.AutoGenerateColumns == false)
{
foreach (var pair in objData.PropertyDataTable
.Where(pair => pair.Value.IsNative == true
&& pair.Value.IsList == false))
{
string propertyName = pair.Key;
PropertyData propertyData = pair.Value;

if (propertyData.Type == typeof(bool))
{
var column = new DataGridViewCheckBoxColumn()
{
Name = propertyName,
HeaderText = propertyName,
DataPropertyName = propertyName,
ValueType = propertyData.Type,
};
m_DataGrid.Columns.Add(column);
}
else
{
var column = new DataGridViewTextBoxColumn()
{
Name = propertyName,
HeaderText = propertyName,
DataPropertyName = propertyName,
ValueType = propertyData.Type,
};
m_DataGrid.Columns.Add(column);
}
}
}

列出现了,我可以添加一个新行,但数据实际上并没有绑定(bind),并且没有像通常自动生成列时那样填充行的默认值。

当我离开 View 并返回时,添加的行会保留,但数据不会保留。

将自动生成的列与调试器中手动创建的列进行比较,两者之间唯一 属性是IsDataBound DataGridViewColumn 基类的属性。

当启用 AutoGenerateColumns 时,IsDataBound 设置为 true,列表中有一个或多个元素,但如果列表具有零个初始元素,则 IsDataBound 设置为 false,尽管列的 DataPropertyName 属性已正确设置。

有没有办法将空列表绑定(bind)到数据网格,并允许用户向空白列表添加行,并正确绑定(bind)所有内容?

我什至尝试过在绑定(bind)之前将一个元素添加到一个空列表中,让它自动生成并绑定(bind)列...但是一旦删除该行,列就会消失,绑定(bind)也会丢失。

其他实现细节:

我正在尝试绑定(bind)一个数据源,该数据源是继承自的自定义列表/集合类型:

 - ICustomTypeDescriptor
- IBindingList
- ICancelAddNew
- IList<T>
- ICollection<T>
- IEnumerable<T>
- IList
- ICollection
- IEnumerable

列表中的对象是继承自 ICustomTypeDescriptor 的动态对象,并将属性映射到字典中的值。这些类型在 ObjectDefinition 类中定义,该类知道动态类型的可用属性信息(属性名称、类型、属性等...)每个列表都有一个分配给它的定义,因此列表中的每个对象都具有相同的定义。

我认为这无关紧要,因为只要列表中至少有一个元素,一切都已正确绑定(bind),并且可以正常工作。

最佳答案

对于列表,规则不是 ICustomTypeDescriptor,而是 ITypedList。在列表级别实现它,您可以在运行时提供您认为合适的属性。因为这不依赖于任何行,所以它甚至应该适用于零行。

关于c# - 将 DataGridView 绑定(bind)到可能包含零个元素的 IBindingList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11767477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com