zoukankan      html  css  js  c++  java
  • treegridview

    For all those getting the error:

    "Unable to cast object of type 'System.Windows.Forms.DataGridViewTextBoxCell' to type 'AdvancedDataGridView.TreeGridCell'."

    If you legitimately want to have a textbox column in front of the TreeGridColumn make the following change.

    In TreeGridNode.cs at line 262 (Or find the following statement:

    <---

    if (cell.GetType().IsAssignableFrom(typeof(TreeGridCell)))

    <---

    Replace it with this if statement:

    <---

    if (cell.GetType().Equals(typeof(TreeGridCell)))

    <---

    The problem is the TreeGridColumn was inherited from the texBoxColumn so the original statement was giving a false positve.

    Hope it helps.

    Dear Mark,

    thanks for sharing this. As others pointed out already, expanding nodes becomes utterly slow even for just a few hundred nodes.

    The problem lies in changing the CellStyle Padding in TreeGridCell.cs line 106.

    Changing this seems to rebuild the geometry of the entire tree. But the Padding is not used in the base code but only in the overridden Paint method.

    Thus an easy solution to speed up this widget is to introduce your own Padding field. This works fine as the vertical padding keeps constant and thus changes do not affect other cells.

    Best Regards

    Matthias

    Hi Mark,

    Thank you for this great control. As far as the slow performance caused by setting the Padding goes (thanks for identifing the problem Matthias!), one easy solution is to calculate the padding inside OnPaint().

    This is what I did roughly:

    TreeGridCell.cs in function OnPaint():

    replaced

    Rectangle glyphRect = new Rectangle(cellBounds.X + this.GlyphMargin, cellBounds.Y, INDENT_WIDTH, cellBounds.Height - 1);

    with

    _lastKnownGlyphRect = new Rectangle(cellBounds.X + this.GlyphMargin, cellBounds.Y, INDENT_WIDTH, cellBounds.Height - 1);

    and moved the call just before base.OnPaint().

    Added

    cellStyle.Padding = new Padding(_lastKnownGlyphRect.Right+_imageWidth, 0, 0, 0);

    just before calling base.OnPaint().

    Naturally, I hashed out setting this.Style.Padding at the end of UpdateStyle(). And I had to change OnMouseDown() and replace

    if (e.Location.X > this.InheritedStyle.Padding.Left)

    with

    if (e.Location.X > _lastKnownGlyphRect.Right || e.Location.X < _lastKnownGlyphRect.Left)

    Works much faster with larger number of elements now. :) Just be careful when using my code, I haven't tested it thoroughly yet. :P

  • 相关阅读:
    linux下虚拟机virtualbox USB设备设置
    位带操作
    带通滤波器
    滞回比较器
    warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.
    汇编指令速查
    Win32汇编基础1
    第一个win32汇编程序开发步骤
    使用BIOS进行键盘输入和磁盘读写(学习汇编)
    直接定址表(学习汇编)
  • 原文地址:https://www.cnblogs.com/zitiger/p/1540154.html
Copyright © 2011-2022 走看看