0

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

因为它是一个 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;
        }

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

问候

_埃里克

4

3 回答 3

2

收到 Mike@infragistics 的回复,我不知道 ValueListResolved

迈克的回答

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

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

于 2010-12-22T16:38:57.527 回答
2

如果您对值列表使用“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;
                }
            }
        }
    }
于 2012-05-17T19:35:18.557 回答
0

这可能与您的问题相关,也可能不相关,但您的代码中有很多奇怪的东西。

UltraDropDown fruitUltraDropDown = new UltraDropDown();

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

fruitUltraDropDown.DataSource = fruits.ToList();

这会List<KeyValuePair<int, string>>从您的Dictionary. fruits现在无法访问并且有资格进行垃圾收集,对其所做的任何更改都不会传播到fruitUltraDropDown. 为什么你创造fruits只是为了把它扔掉?

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

类型在哪里?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();

如果这没有帮助,您必须在您的问题中添加足够的信息,以便没有您的源代码的人可以理解您正在尝试做什么。

于 2010-12-22T18:54:54.867 回答