2009-07-07 2 views
1

Was ich suche ist eine Möglichkeit, die MS-Access-Stil kontinuierliche Form in asp.net zu imitieren. In einem bestimmten Fall möchte ich ein Steuerelement, das an eine Datenquelle gebunden ist, die für jede Zeile eine Dropdown-Liste zurückgibt, die an den Wert innerhalb der Datenquelle gebunden ist. Jede Änderung an einer der Dropdown-Listen würde sofort eine Aktualisierung der Datenbank bewirken.ASP.net Liste der Dropdown-Listen - ähnlich zu kontinuierlichen Formular zugreifen

Ich habe die Hälfte erreicht dies mit einem Repeater-Steuerelement, mit dem DropDownList.SelectedValue innerhalb der Repeater.ItemDataBound-Ereignis zugewiesen.

Aber jetzt, unter der Annahme ich ein OnSelectedIndexChanged Ereignis der Dropdownlist hinzufügen - wie würde ich dann die Repeater abfragen, um zu wissen, welche Zeile ich war (den Primärschlüsselwert, zum Beispiel zu bekommen)

Ich bin nicht Sicher, dass dies leicht gemacht werden kann. Also ist die Frage, was ich wirklich tun sollte? Ich möchte kein GridView verwenden, das erfordert, dass ich eine Zeile zum Bearbeiten auswähle. Ich möchte nur die Dropdown-Listen für alle Aktualisierungen autopostback haben.

Hoffe, das ist klar ?!

Prost! : D

Antwort

0

Beispiele willen, kann sagen, dass wir zu einer benutzerdefinierten Klasse verbindlich genannt Record

public class Record 
{ 
    public int Id; 
    public string Value; 
} 

Wenn Sie benutzerdefinierte Logik auf dem Repeater.OnItemCreated Ereignis setzen können Sie den Primärschlüssel der ID des anheften Dropdown-Liste

protected void Repeater_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    if (!(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)) 
     return; 

    var dataItem = e.Item.DataItem as Record; 
    if (dataItem == null) return; 

    var dropdown = e.Item.FindControl("myDropDown") as DropDownList; 
    if (dropdown == null) return; 

    dropdown.ID = dropdown.ID + dataItem.Id; 
} 

Dann auf dem SelectedIndexChange, können Sie die ID aus dem Drop-Down-ziehen können, die das Ereignis ausgelöst.

protected void SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var dropdown = sender as DropDownList; 
    if (dropdown == null) return; 

    var stringId = dropdown.ID.Replace("myDropDown", ""); 
    int id; 
    if (Int32.TryParse(stringId, out id)) 
    { 
     updateRecord(id, dropdown.SelectedValue); 
    } 
} 

Es ist sehr viel ein hässlicher Hack, aber es sollte Ihnen erlauben, zu tun, was Sie wollen.

+0

Dank NerdFury - Sieht aus, als wäre es die beste Option für mich im Moment, obwohl ich einige Datenbindung Probleme haben muss .. –

+0

Darüber hinaus konnte ich keinen Weg finden, um die ID aus die Datenquelle des Repeaters bis zum Item-Databound-Ereignis, und dort (anstatt des erstellten Items) konnte ich die ID der Dropdown-Liste nicht ändern! Wyatt's Route eines benutzerdefinierten Controls wird also jetzt ... –

+0

Es gibt keinen Grund, dass Sie nicht in der Lage sein sollten, die ID Ihrer Dropdown-Box im ItemDataBound-Event-Handler zu ändern. Was siehst du, dass du das glaubst? – NerdFury

0

Der einfachste Weg, dies anzugehen, wäre, den ASP.NET-Stil des Access-Endlosformulars nachzuahmen. Um ein UserControl für die Benutzeroberfläche auf Zeilenebene zu erstellen, fügen Sie das UserControl in einen Repeater ein.

Verwandte Themen