2010-12-21 14 views
0

Welches Ereignis muss ich behandeln, um Benutzern zu erlauben, "Früchte" entweder mit einem Wertelisten- oder Ultra-Dropdown-Menü hinzuzufügen.Infragistics Ultragrid valueList/UltraDropDown

Da es sich um ein KVP ich immer Format Ausnahme erhalten

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; 
     } 

Welches Ereignis kann ich so handhaben, wenn ein Benutzer „Traube“ Ich habe es in das Wörterbuch mit meinem eigenen Schlüssel hinzufügen können, und es wird hinzugefügt zur Dropdown-Liste. Derzeit, wenn ich „Traube in der Zelle eingeben, bekomme ich nur ein Format Ausnahme.

Grüße

_Eric

+0

Sehr verwirrende Frage; 'UltraWinGrid' und' UltraDropDown' sind unabhängige Steuerelemente. Von welcher "Zelle" sprichst du? Es ist unmöglich, dem 'Dictionary' etwas hinzuzufügen, weil Sie es nach dem Erzeugen der' ValueList' wegwerfen. Veröffentlichen Sie den Fehler, den Sie erhalten. –

+0

@Dour Danke, ich bin nicht sicher, was verwirrend ist. Ich habe eine UltraDropDown zu "MyColumn" in meinem Ultragrid hinzugefügt. Dies funktioniert einwandfrei, Benutzer können "Apple" || auswählen "Banane". Benutzer müssen in der Lage sein, ihren eigenen Wert einzugeben, also "traube", aber wenn sie dies tun, bekomme ich eine Formatausnahme, die besagt, dass sie nicht in int.32 konvertieren kann, was erwartet wird, da valueMember ein int ist. Ich suche nach einem Ereignis, das behandelt werden kann, damit ich es wieder zum Wörterbuch hinzufügen und die Liste erneut binden kann. Normalerweise würde ich mit AddNew umgehen und würde meinen eigenen Index zusammen mit dem benutzerdefinierten Text (-3, "traube") in diesem Beispiel hinzufügen – Eric

Antwort

2

erhielt eine Antwort von Mike @ infragistics, ich wusste nicht, über ValueListResolved

Answer from Mike

Es gibt eine Reihe von Veranstaltungen, die Sie nutzen könnten. ich wahrscheinlich BeforeCellUpdate verwenden würde oder vielleicht BeforeExitEditMode.

So oder so, was Sie tun würden, ist verwenden die ValueListResolved Eigenschaft auf der Zelle die Valuelist zu bekommen und dann Sie können die GetValue-Methode verwenden, um finden einen passenden Eintrag in der Liste, um zu versuchen. Verwenden Sie die Zelle.EditorResolved.Text, um den aktuellen Bearbeitungstext in der Zelle für Ihre Suche zu erhalten.

0

Dies kann für Ihre Frage relevant sein oder nicht, aber es gibt viele seltsame Dinge in Ihrem Code.

UltraDropDown fruitUltraDropDown = new UltraDropDown(); 

Infragistics enthält Assistenten zum Erstellen, Füllen und Anzeigen von Steuerelementen in der Datei designer.cs. Durch die Instanziierung eines Steuerelements wie diesem werden alle Designerdaten verworfen und ein neues Standardsteuerelement erstellt. Hast du das wirklich vor? Ist das ein Auszug aus der Datei designer.cs?

fruitUltraDropDown.DataSource = fruits.ToList(); 

Dies schafft eine neue List<KeyValuePair<int, string>> von Ihrem Dictionary. fruits ist jetzt nicht mehr erreichbar und für die Garbage-Collection geeignet. Alle daran vorgenommenen Änderungen werden niemals an fruitUltraDropDown weitergegeben. Warum erstellen Sie fruits nur um es wegzuwerfen?

Welches Ereignis kann ich umgehen so, wenn ein Benutzer „Traube“ ...

Typen, wo? fruitUltraDropDown? Die Designerdaten wurden verworfen, sodass fruitUltraDropDown nicht bearbeitet werden kann, es sei denn, es wird viel Code angezeigt, den Sie nicht anzeigen. MyUltraGrid? Sie zeigen keinen Code dafür, so kann niemand eine Ahnung haben, was es implementiert. Ein Textfeld? Programmatische Daten? Ein totales Geheimnis.

ich es dem Wörterbuch hinzufügen ...

etwas Dictionary Hinzufügen ist sinnlos, weil sie nicht mehr verwenden.Wenn Sie es ultraDropDown1.DataSource hinzufügen wollen, müssen Sie hinzufügen eine KeyValuePair<int, string>:

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

Dies wird nur den Eintrag in den Sicherungsspeicher hinzuzufügen. Wenn Sie es in ultraDropDown1 aufnehmen möchten:

ultraDropDown1.DataBind(); 

Ist dies nicht hilfreich ist, müssen Sie genügend Informationen, um Ihre Frage hinzufügen, so dass jemand ohne den Quellcode kann verstehen, was Sie zu tun versuchen.

+0

das ist die Quelle, ich habe den Code bearbeitet, um die FruitInit hoffentlich zu zeigen das macht es klarer. Das AfterCellUpdate war das Ereignis, das ich benötigte, um zu überprüfen, ob der Benutzereintrag in der Liste war, wenn er nicht zum Wörterbuch hinzugefügt wurde und das dropDown für andere zu verwendende Zeilen aktualisierte. – Eric

1

Wenn Sie ein "UltraDropDown" für die Werteliste verwenden, können Sie das Ereignis "BeforeDropDown" verarbeiten. Vergleichen Sie die "verwendeten" Werte im Raster mit den Werten in UltraDropDown und blenden Sie die verwendeten Werte aus. Arbeitete für mich.

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; 
       } 
      } 
     } 
    }