1

我创建了一个自定义 GridViewTextBoxColumn 来处理以下内容:

1)当不在 EditMode (问题区域)时显示为 Normal TextboxColumn 1)在编辑模式下,我将 AutoComplete 添加到 Cell 以提示用户输入项目列表 2)单击我放置在左侧的椭圆按钮要浏览的文本框(打开一个带有更多列的项目网格的表单)

我已经添加了所有没有问题,甚至可以在单元格上动态添加 BeginEdit 中的 AutoComplte 源(或者我可以在 AutoCompleteTextBoxCellElement 的 CreateChildElements 方法中添加它)

所以会发生以下情况:

我的课是这样的:

public class AutoCompleteTextBoxCell : GridDataCellElement      
{
    public AutoCompleteTextBoxCell(GridViewColumn column, GridRowElement row)
        : base(column, row)
    {

    }
}

然后我添加这个方法来添加元素,文本框

protected override void CreateChildElements()
    {
        txtStockCode = new RadTextBoxElement();
        this.Children.Add(txtStockCode);
        LoadData("Code"); //Adding Auto Complete in this event
    }

我还添加了这个,以便我可以排列单元格中的元素。

protected override SizeF ArrangeOverride(SizeF finalSize)
    {
        RectangleF rect = GetClientRectangle(finalSize);
        RectangleF rectEdit = new RectangleF(rect.X, rect.Y, rect.Width - (32 + 1), rect.Height);
        RectangleF rectButton = new RectangleF(rectEdit.Right + 1, rectEdit.Y, 32, rect.Height);
        if (this.Children.Count >= 2)
        {
            this.Children[0].Arrange(rectEdit);
            this.Children[1].Arrange(rectButton);
        }
        else
        {
            rectEdit = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height);
            this.Children[0].Arrange(rectEdit);
        }

        return finalSize;
    }

然后回到网格上,我执行以下操作:

enter code here

私人无效grdMain_CellBeginEdit(对象发件人,GridViewCellCancelEventArgs e){如果(e.Column.Name ==“colItem”){

            RadButtonElement btnMore = new RadButtonElement();
            btnMore.Text = "...";
            btnMore.Click += new EventHandler(btnMore_Click);
            grdMain.CurrentCell.Children.Add(btnMore);
        }
    }

这会添加我的按钮,以便我可以在单元格的编辑模式下启动浏览表单。

在 EndEdit 事件中,我删除了按钮。

private void grdMain_CellEndEdit(object sender, GridViewCellEventArgs e)
    {
        if (e.Column.Name == "colStock")
        {
            if (this.grdMain.CurrentCell.Children.Count <= 2) //This might be 1 or 2
            {
                if (grdMain.CurrentCell.Children.Count == 2) // If its two, I need to remove the button
                {
                    if (grdMain.CurrentCell.Children[1] is RadButtonElement)
                    {
                        this.grdMain.CurrentCell.Children.RemoveAt(1);
                    }
                    //If one, I do nothing for the moment. -- I think.
                }
            }  
        }
    }

一切都好接受一个问题。

添加单元格后,我假设它会返回到像普通文本框列一样的行为(由于我的继承),但事实并非如此,文本被隐藏 - 我看不到它。

当我单击单元格进入编辑模式时,我输入的文本就在那里。

我确实认为这是我要实现的目标的问题,我认为这是事件链的问题。

谁能告诉我为什么当单元格不处于编辑模式时文本没有显示?

问候约翰

4

0 回答 0