2014-07-11 13 views
7

Ich verwende eine RadComboBox. In meinem Code habe ich den gewählten Wert der RadComboBox etwa so:Wie Sie RadComboBox mit einer Datenquelle auf AutomaticLoadOnDemand programmgesteuert setzen

public void RCB_PO_NUM_DataBound(object sender, EventArgs e) 
     { 

      var itemRCB_PO_NUM = RCB_PO_NUM.FindItemByText(stringPO_NUM); 

      itemRCB_PO_NUM.Selected = true; 
      itemRCB_PO_NUM.Value = stringPO_NUM; 


     } 

Ich bin eine Liste von Zahlen aus meiner Datenbank auswählen und sie in der RadComboBox anzeigt. Also muss ich das DataBound Ereignis verwenden, um die Daten zu erhalten.

Das funktioniert gut, bis ich die AutomaticLoadOnDemand Eigenschaft auf True eingestellt habe. Sobald ich das tue, bekomme ich den gewünschten Effekt, den ich mit der Eigenschaft AutomaticLoadOnDemand haben möchte, und dann verliere die Fähigkeit, meinen RadComboBox auf einen ausgewählten Wert zu setzen.

Ich muss in der Lage sein, beide zu tun, die AutomaticLoadOnDemand wirklich helfen, das Laden der Artikel in der RadComboBox wirklich schnell zu laden. Der Code muss nicht im DataBound-Ereignis sein. Mir ist es egal, in welchem ​​Ereignis es ist, solange beide funktionieren. Kann jemand bitte sagen, welche Methode ich verwende, um die AutomaticLoadOnDemand Eigenschaft auf wahr zu setzen, oder was mache ich falsch?

+0

Was ist Ihre DataSource? Wie binden Sie Daten an RadComboBox? – Win

+0

@Win Ich benutze RadComboBox UI, um die Tabelle und die Spalte, die ich anzeigen möchte, auszuwählen. – nate

+0

@note Mit welcher Methode binden Sie Daten an RadComboBox? Zum Beispiel SqlDataSource, EntityDataSource, benutzerdefinierte Bindung. – Win

Antwort

1

Probieren Sie das OnClientLoad-Ereignis und die JavaScript-API des Steuerelements aus, um ein Element auszuwählen: http://www.telerik.com/help/aspnet-ajax/combobox-client-side-radcombobox.html. Speichern Sie den gewünschten Text in einem versteckten Feld oder einer globalen JS-Variablen.

Das Problem ist, dass Sie die Artikel überhaupt nicht haben, bis die Anfrage zurückkommt, also bin ich nicht sicher, ob das funktioniert. So können Sie die gleiche Idee mit dem OnClientItemsRequested http://www.telerik.com/help/aspnet-ajax/combobox-onclientitemsrequested.html Ereignis versuchen - sehen, ob ein Artikel mit dem gewünschten Text vom Server zurückkam und es auswählte.

+0

Ich werde es untersuchen. Danke – nate

+0

Ich möchte wirklich nicht Java benutzen müssen, um zu tun, was ich tun möchte. Viel eher tun es in C# – nate

+0

1) es ist JavaSCRIPT, nicht JAVA 2) der ganze Punkt des Ladens bei Bedarf ist, diese Elemente auf dem Server nicht zu laden, so dass sie nur auf dem Client verfügbar sind. – rdmptn

2

Wenn Sie LoadOnDemand verwenden, ist Ihre Combobox nicht gebunden, bis der Benutzer versucht, sie zu erweitern. Daher können Sie das DataBound-Ereignis nicht verwenden.

Ich bin mir nicht sicher, was ist Ihr Anwendungsfall. Wenn Sie das ausgewählte Element nur dem Benutzer anzeigen möchten, können Sie die Eigenschaft Text des Kombinationsfelds im Ereignis Page_Load ausprobieren.

protected void Page_Load(object sender, EventArgs e) 
{ 
    itemRCB_PO_NUM.Text = stringPO_NUM; 
} 

Wenn Sie wirklich ausgewählte Artikel müssen dann vielleicht können Sie einen Artikel Server-Seite hinzufügen (sorry ich kann es jetzt nicht testen)

protected void Page_Load(object sender, EventArgs e) 
{ 
    itemRCB_PO_NUM.Items.Add(new RadComboBoxItem() 
    { 
     Value = stringPO_NUM, 
     Text= stringPO_NUM, 
     Selected = true 
    }) 
} 

EDIT: habe ich einige research und es scheint,

Hinweis: dass ItemDataBound Ereignis sollte korrekt ausgelöst werden, wenn Sie die DataSourceID oder Datasource Eigenschaften RadComboBox während des automatischen Last On Demand die ItemDataBound Ereignis f binden ires normalerweise, was bedeutet, dass Sie es verwenden können den Text des Elements und Werteigenschaften sowie modifizieren Sammlung seine Attribute auf der DataItem Basis zu ändern, usw.

So können Sie versuchen, es zu benutzen:

protected void RadComboBox1_ItemDataBound(object o, RadComboBoxItemEventArgs e) 
{ 
    DataRowView dataSourceRow = (DataRowView) e.Item.DataItem; 
    if(e.Item.Text == stringPO_NUM) 
    { 
     e.Item.Selected = true; 
     e.Item.Value = stringPO_NUM; 
    } 
} 

Aber was mir verdächtig ist ist, dass auf dem Bildschirm, den Sie in den Kommentaren angegeben habe ich sehen kann, dass Ihre Zeichenfolge stringPO_NUM null Wert hat. Ich denke, dass dies der Grund sein könnte, warum GetItemByText kein Element an Sie zurückgibt.

Auch es wäre hilfreich, wenn Sie angeben würden, warum Sie diesen Artikel ausgewählt werden müssen.

+0

Ich werde dies versuchen und auf Sie zurückkommen. Danke für die Antwort. – nate

+0

Ich kann die Daten für das Steuerelement für das Ereignis Page_Load nicht binden, da ich den Wert oder den Text des Steuerelements in diesem Ereignis nicht festlegen kann. Wenn ich versuche, den von Ihnen vorgeschlagenen Code auszuführen, erhalte ich vom Debugger einen Nullwert. Ich habe das herausgefunden, als ich diese Frage vorher gestellt habe: http://stackoverflow.com/questions/24702270/how-to-set-a-radcombobox-that-isusing-a-data-source-to-a-selected -value-in-code – nate

+0

Können Sie angeben, welche Eigenschaft einen Nullwert hat? – Machet

1

Wie die anderen sagten - wenn LoadOnDemand aktiviert ist, gibt es keine Combobox-Elemente auf dem Server. Deshalb können Sie nicht FindItemBy * Methoden verwenden - sie werden immer NULL zurückgeben.

Geben Sie weitere Informationen, was genau Sie erreichen möchten, und wir können Ihnen dann helfen.

Ich denke, Sie möchten die Combobox mit dem Text, den Sie bereits haben, füllen - dafür verwenden Sie besser die clientseitige API, z. Beim Ereignis combo load können Sie die Methode requestItems ("your text", true) aufrufen, die den bereits vorhandenen Text weitergibt, und das Combo führt eine Ajax-Anfrage durch, um die Elemente nach dem Text zu filtern, den Sie als Parameter übergeben.

+0

Ich verwende RadComboBox, um eine Liste von Zahlen aus einer Datenbank auszuwählen. Wie ich bereits erwähnt habe, ist es mir egal, welches Ereignis verwendet wird, so dass ich den Wert aus der RadComboBox auswählen und das AutomaticLoadOnDemand programmatisch zur gleichen Zeit im Codebehind verwenden kann. – nate