2010-12-21 105 views
0

我需要處理哪些事件以允許用戶添加「水果」價值列表或超下拉列表。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; 
     } 

我可以處理哪些事件,以便當用戶鍵入「葡萄」我可以用我自己的鍵添加到字典中,它被添加到下拉列表。目前,如果我在單元格中鍵入「葡萄,我只是得到一個格式異常。

問候

_Eric

+0

非常令人困惑的問題; `UltraWinGrid`和`UltraDropDown`是無關的控件。你在說什麼「細胞」?在'Dictionary'中添加任何內容都是不可能的,因爲在生成'ValueList'後將它扔掉。另外,發佈你正在得到的錯誤。 – 2010-12-21 23:43:08

+0

@Dour謝謝,我不確定什麼是混淆。我在我的超網格中添加了一個ultraDropDown到「MyColumn」。這工作正常,用戶可以選擇「蘋果」|| 「香蕉」。用戶需要能夠輸入自己的值,即「葡萄」,但是當他們這樣做時,我得到一個格式異常,說它不能將其轉換爲int.32,因爲它的valueMember是一個int。我正在尋找一個事件來處理,所以我可以將它添加回字典並重新綁定列表。通常對於綁定源,我將處理AddNew,並在此示例中添加我自己的索引以及用戶定義文本(-3,「grape」) – Eric 2010-12-22 00:10:37

回答

2

得到了邁克@ Infragistics的迴應,我不知道ValueListResolved

Answer from Mike

有一些事件,你可以使用 我可能會使用 BeforeCellUpdate或也許 BeforeExitEditMode。

無論哪種方式,你會做的是使用 的ValueListResolved財產上的 細胞獲得值列表,然後你 可以使用GetValue方法來嘗試 在列表中找到匹配的項目。使用 cell.EditorResolved.Text獲取 單元格中當前的編輯文本 您的搜索。

0

這可能與您的問題相關,也可能不相關,但您的代碼中有許多奇怪的事情。

UltraDropDown fruitUltraDropDown = new UltraDropDown(); 

Infragistics包含嚮導,用於在designer.cs文件中創建,填充和顯示控件。像這樣實例化一個控件會拋棄所有設計器數據並創建一個新的默認控件。你真的打算這麼做嗎?這是來自designer.cs文件的摘錄嗎?

fruitUltraDropDown.DataSource = fruits.ToList(); 

這將創建從DictionaryList<KeyValuePair<int, string>>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(); 

如果這是沒有幫助的,你必須足夠的信息添加到您的問題,從而使他人未經您的源代碼可以明白你正在嘗試做的。

1

如果您使用「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; 
       } 
      } 
     } 
    }