2010-12-16 14 views
0

Ich habe ein WebDataGrid mit einer SqlDataSource verknüpft, um Daten anzuzeigen. Wenn eine Zeile ausgewählt ist, möchte ich einige Textfelder und Dropdownlisten mit den Daten aus dieser Zeile für Bearbeitungszwecke füllen. Die Textfelder funktionieren gut; Ich verwende den folgenden Code, um das zweite Feld im Raster (Datum) und füllen Sie das entsprechende Textfeld zu wählen (Ich verwende VB):Popup DropDownList von WebDataGrid

txtDate.Text = currentRow.Items(2).Value 

Allerdings, wenn ich versuche, die Dropdownlists zu bevölkern die gleiche Code-Struktur unter Verwendung von , bekomme ich folgende Fehlermeldung:

'ddlType' has a SelectedValue which is invalid because it does not exist in the list of items. 

ich das Problem denken kann, dass die Dropdownlists bevölkert verwenden type_id, während das Gitter type_name anzeigt. Würde dies das Problem verursachen, und gibt es eine Möglichkeit, dies zu umgehen?

Antwort

0

Es gibt einige Dinge, die Sie könnten versuchen:

  1. Ändern der SQLDataSource die type_id auch zurückzukehren und setze die Spalte auf visible = "false", so kannst du dieses Feld anstelle des Namens auswählen und das für .SelectedValue verwenden.

  2. Wenn das nicht möglich ist, dann können Sie folgenden Code verwenden (dies wird nur funktionieren, wenn der Text, der unten in der Drop angezeigt ist einzigartig und ist genau das gleiche wie das, was in der Grid-Ansicht angezeigt wird):

    'replace this with the call to currentRow.Items(#).Value
    Dim sometext As String = "type_name"

    DropDownListName.Items.FindByText(sometext).Selected = True

  3. die andere Möglichkeit ist in der Drop durch jedes Element in einer Schleife nach unten und um den Text zu finden, ist dies wie die Brute-Force-Methode aber funktioniert.

    'replace this with the call to currentRow.Items(#).Value

    Dim sometext As String = "type_name"

    For Each ddItem As ListItem In ddArriveAMPM.Items

    `If String.Compare(sometext, ddItem.Text, True) = 1 Then` 
        `ddItem.Selected = True` 
        `End If`   
    `Next` 
    
+0

Ich bin mir nicht sicher, ob ich die zweite Option verstehe (ich bin ziemlich neu in ASP.NET) der type_name der ausgewählten Zeile ohne currentRow.Items (#). Value? (Jedes Element in der Dropdown-Liste ist einzigartig und es ist identisch mit dem Namen in der Rasteransicht angezeigt.) – dj18

+0

Danke - Ich verwende den ersten Vorschlag ! – dj18

0

Sie müssen das Element zur Listbox hinzufügen, bevor Sie es auswählen können.

DropDownListX.Items.Add("Item"); 

oder

DropDownListX.Items.Add(new ListItem("String","Value")); 

Achten Sie auf die Dropdown-Liste zu löschen, wenn eine neue Zeile sonst die alten Zeilen Werte auswählen wird dort bleiben.

DropDownListX.Items.Clear(); 

Danach können Sie SelectedValue

Beifall verwenden, Stefan

+0

Jetzt bin ich erhalte die folgende Fehlermeldung: „Invalid Postback oder Callback-Argument ... Aus Sicherheitsgründen ist diese Funktion überprüft dass Argumente für Postback- oder Callback-Ereignisse von dem Serversteuerelement stammen, das sie ursprünglich gerendert hat Wenn die Daten gültig und erwartet sind, u Sehe den ClientScriptManager.RegisterForEventValidation-Methode, um die Postback- oder Callback-Daten für die Validierung zu registrieren. "Und das Auffüllen der Textfelder funktioniert auch nicht mehr. – dj18

+0

Übrigens für: DropDownListX.Items.Add (neues ListItem (" String "," Value ")); - wären die Parameter currentRow.Items (1) .Value (oder welche Feldnummer ich brauche)? – dj18

+0

Ja, vielleicht gut, um eine currentRow.Items (1) .Value.ToString() zu tun. Sie können es für beide tun die Elemente, so dass Sie SelectedValue später im Code verwenden können, wenn Sie keine ID oder etwas haben, um den Wert zu binden – StefanE