簡體   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