Frage

gibt es eine Möglichkeit, die Datatextfield-Eigenschaft eines Dropdownlist in asp.net über c # zu machen, bestehend aus mehr als eine Eigenschaft eines Objekts?

public class MyObject
{
  public int Id { get; set; }
  public string Name { get; set; }
  public string FunkyValue { get; set; }
  public int Zip { get; set; }
}

protected void Page_Load(object sender, EventArgs e)
{
  List<MyObject> myList = getObjects();
  ddList.DataSource = myList;
  ddList.DataValueField = "Id";
  ddList.DataTextField = "Name";
  ddList.DataBind();
}

Ich möchte zum Beispiel verwenden "Namen" nicht, sondern "Namen (Zip)" zum Beispiel.

Sicher, kann ich die MyObject-Klasse ändern, aber ich mag nicht, dies zu tun (weil die MyObject-Klasse in einer Modellklasse und soll nicht etwas, was ich in der Benutzeroberfläche benötigen).

War es hilfreich?

Lösung

Fügen Sie eine weitere Eigenschaft auf die MyObject-Klasse und binden an diese Eigenschaft:

public string DisplayValue
{
 get { return string.Format("{0} ({1})", Name, Zip); }
}

Oder wenn Sie MyObject nicht ändern können, ein Wrapper-Objekt in der Präsentationsschicht (nur zur Anzeige) erstellen. Dies kann auch mit einigen LINQ getan werden:

List<MyObject> myList = getObjects();
ddList.DataSource = (from obj in myList
                    select new
                    {
                      Id = obj.Id,
                      Name = string.Format("{0} ({1})", obj.Name, obj.Zip)
                    }).ToList();
ddList.DataValueField = "Id";
ddList.DataTextField = "Name";
ddList.DataBind();

(sorry ich nicht Visual Studio zur Verfügung haben, so dass es möglicherweise Fehler im Code sein)

Andere Tipps

Ich würde empfehlen, diese zu lesen: http://martinfowler.com/eaaDev/PresentationModel.html

Im Grunde wollen Sie eine Klasse erstellen, die auf eine bestimmte UI steht für verbindlich. Also würden Sie Ihr Model (Mein Objekt in Ihrem Beispiel) zu einem Viewmodel-Objekt zuordnen und dann binden Sie die Dropdown-Liste, die Art und Weise. Es ist eine coole Art, über die Trennung von Bedenken zu denken.

EDIT: Hier ist eine weitere Blog-Serie auf Ansichtsmodell: http://blogs.msdn.com/dancre/archive/2006/10/11/datamodel-view-viewmodel-pattern-series.aspx

BTW, Versuchen Sie, die „Datatextfield“ und „Datavaluefield“ zuweisen, bevor Sie die Datasource zuweisen. Dadurch wird so verhindern, dass die „SelectedIndexChanged“ Ereignis feuern, während Databinding ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top