繁体   English   中英

Infragistics Ultragrid valueList / UltraDropDown

[英]Infragistics Ultragrid valueList/UltraDropDown

我需要处理什么事件,以允许用户在值列表或超级下拉列表中添加“水果”。

由于它是KVP,所以我总是会遇到格式异常

Dictionary<int,string> fruits = new Dictionary<int,string>();



 private void FruitInit()
     {
    //Create some fruit        
    fruits.Add(-1,"apple");
            fruits.Add(-2,"banana");

            //Create and add to the ultraDropDown
            UltraDropDown fruitUltraDropDown = new UltraDropDown();
            fruitUltraDropDown.DataSource = fruits.ToList();
            fruitUltraDropDown.DisplayMember = "Value";
            fruitUltraDropDown.ValueMember = "Key";
            MyUltraGrid.DisplayLayout.Bands[0].Columns["MyColumn"].ValueList = fruitUltraDropDown;
        }

我可以处理什么事件,所以当用户键入“ grape”时,可以使用自己的键将其添加到字典中,然后将其添加到下拉列表中。 目前,如果我在单元格中键入“ grape”,则只会收到格式异常。

问候

_Eric

得到了回应迈克@infragistics,我不知道ValueListResolved

迈克的回答

您可以使用许多事件。 我可能会使用BeforeCellUpdate或BeforeExitEditMode。

无论哪种方式,您都将使用单元格上的ValueListResolved属性来获取ValueList,然后可以使用GetValue方法尝试在列表上查找匹配项。 使用cell.EditorResolved.Text来获取单元格中用于编辑的当前编辑文本。

如果将“ UltraDropDown”用于值列表,则可以处理其“ BeforeDropDown”事件。 将网格中的“已使用”值与UltraDropDown中的值进行比较,然后隐藏正在使用的值。 为我工作。

    private void BindApprovalsTab()
    {
        uddApproverList.BeforeDropDown -= new CancelEventHandler(uddApproverList_BeforeDropDown);
        uddApproverList.DataSource = dsFindingDetails.Tables["Approvers"];
        uddApproverList.DisplayMember = "fldDisplayName";
        uddApproverList.ValueMember = "fldRoleGID";
        uddApproverList.Width = 150;
        uddApproverList.DisplayLayout.Bands[0].Columns["fldRoleGID"].Hidden = true;
        uddApproverList.DisplayLayout.Bands[0].Columns["fldDisplayName"].Header.Caption = "Role";
        uddApproverList.DisplayLayout.Bands[0].Columns["fldDisplayName"].Width = uddApproverList.Width;
        uddApproverList.BeforeDropDown += new CancelEventHandler(uddApproverList_BeforeDropDown);

        ugActionItemApprovals.DataSource = dsFindingDetails.Tables["tblIssueApprovals"];

    }

    void uddApproverList_BeforeDropDown(object sender, CancelEventArgs e)
    {
        //assume all rows show
        foreach (UltraGridRow udr in uddApproverList.Rows)
        {
            udr.Hidden = false;
        }
        //can we remove already used entries?
        foreach (UltraGridRow udr in uddApproverList.Rows)
        {
            string sDDRoleGID = udr.Cells["fldRoleGID"].Value.ToString();
            foreach (UltraGridRow ur in ugActionItemApprovals.Rows)
            {
                if (ur.Cells["fldApprovalRequiredBy"].Value.ToString() == sDDRoleGID)
                {
                    udr.Hidden = true;
                    break;
                }
            }
        }
    }

这可能与您的问题无关,但可能与您的问题无关,但是代码中有很多奇怪的事情。

UltraDropDown fruitUltraDropDown = new UltraDropDown();

Infragistics包括用于在designer.cs文件中创建,填充和显示控件的向导。 实例化这样的控件会丢弃所有设计器数据,并创建一个新的默认控件。 你真的打算吗? 这是来自designer.cs文件的摘录吗?

fruitUltraDropDown.DataSource = fruits.ToList();

这将从您的Dictionary创建一个新的List<KeyValuePair<int, string>> 现在, fruits无法访问并且可以进行垃圾回收,对其所做的任何更改都永远不会传播到fruitUltraDropDown 为什么要制造fruits只是为了扔掉它?

当用户键入“ grape”时,我可以处理什么事件...

类型在哪里? fruitUltraDropDown 设计器数据已被丢弃,因此fruitUltraDropDown是不可编辑的,除非您没有显示很多代码。 MyUltraGrid 您没有为此显示任何代码,因此没有人知道它实现了什么。 文本字段? 程序化数据? 完全是个谜。

我可以将它添加到字典中。

Dictionary添加任何内容都是没有意义的,因为您不再使用它。 如果要将其添加到ultraDropDown1.DataSource ,则必须添加一个KeyValuePair<int, string>

var ds = ultraDropDown1.DataSource as List<KeyValuePair<int, string>>;
ds.Add(new KeyValuePair<int,string>(-3, "grape"));

这只会将条目添加到后备存储中。 如果要将其包含在ultraDropDown1

ultraDropDown1.DataBind();

如果这没有帮助,则必须在问题中添加足够的信息,以便没有源代码的人可以理解您要执行的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM