Wpf 数据网格最大行数
我目前正在使用数据网格,我只想允许用户在将 CanUserAddRows 设置为 false 之前输入最多 20 行数据。
我在自己的数据网格上创建了一个依赖属性(源自原始数据网格)。我尝试使用事件“ItemContainerGenerator.ItemsChanged
”并检查其中的行数,如果行数=最大行数,则使用户可以添加行= false(我得到一个例外,即我'我不允许在“添加行”期间更改它。
我想知道是否有一个好的方法来实现这个......
谢谢和问候, 凯文
I am currently working with data grid where I only want to allow the user to enter UP TO 20 rows of data before making CanUserAddRows to false.
I made a dependency property on my own datagrid (that derives from the original one). I tried using the event "ItemContainerGenerator.ItemsChanged
" and check for row count in there and if row count = max rows, then make can user add row = false (I get an exception for that saying i'm not allow to change it during "Add Row".
I was wondering if there is a good way on implementing this ....
Thanks and Regards,
Kevin
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是一个具有
MaxRows
依赖属性的子类DataGrid
。关于实现需要注意的事情是,如果DataGrid
处于编辑模式并且CanUserAddRows
发生更改,则会发生InvalidOperationException
(就像您一样)问题中提到)。为了解决这个问题,在 OnItemsChanged 中调用一个名为
IsInEditMode
的方法,如果它返回 true,我们订阅事件LayoutUpdated
来检查IsInEditMode再次。
此外,如果
MaxRows
设置为 20,则当CanUserAddRows
为 True 时,必须允许 20 行,当 False 时,必须允许 19 行(为 NewItemPlaceHolder 腾出位置) code> 在 False 上不存在)。它可以像这样使用
MaxRowsDataGrid
Here's a subclassed
DataGrid
with aMaxRows
Dependency Property. The things to note about the implementation is if theDataGrid
is in edit mode andCanUserAddRows
is changed anInvalidOperationException
will occur (like you mentioned in the question).To workaround this, a method called
IsInEditMode
is called inOnItemsChanged
and if it returns true we subscribe to the eventLayoutUpdated
to checkIsInEditMode
again.Also, if
MaxRows
is set to 20, it must allow 20 rows whenCanUserAddRows
is True, and 19 rows when False (to make place for theNewItemPlaceHolder
which isn't present on False).It can be used like this
MaxRowsDataGrid
我是 KISS 的专家 为了减少完成工作所需的行数并保持简单,请使用以下内容:
简单且紧凑;0)
I am an adept of K.I.S.S. To reduce the amount of lines required to do the job and keep it simple, use the following:
Simple and compact ;0)