3 Stimmen

Wie übernehme ich Zeichenkettenwerte aus einer Liste von Objekten und füge sie zu einer Auswahlliste hinzu?

Ich möchte eine Liste von Mitarbeitern mit 3 Teilen nehmen, Mitarbeiter-ID, Nachname und Vorname und fügen Sie sie zu einer Dropdown-Liste zeigt Nachname, Vorname.

Was ich bisher habe, ist, dass ich eine Klasse für die Mitarbeiter erstellt habe:

   public class Employee
{
    public int emp_Id;
    public string lastName;
    public string firstName;

    public Employee(int id, string last, string first)
    {
        this.emp_Id = id;
        this.lastName = last;
        this.firstName = first;
    }
}

und eine Liste zum Auffüllen erstellt:

private List<Employee> employeeList = new List<Employee>();

Diese Liste wird mit Hilfe einer SQL-Abfrage erstellt und dann nach Nachnamen sortiert.

foreach (DataRow row in ds.Tables["EMPLOYEE_TABLE"].Rows)
        {
          employeeList.Add(new Employee(int.Parse(row["EMP_ID"].ToString()), 
          row["LAST_NAME"].ToString(), row["FIRST_NAME"].ToString()));
        }

 employeeList.Sort(delegate(Employee E1, Employee E2) { return E1.lastName.CompareTo(E2.lastName); });

und alles bis zu diesem Punkt funktionierte genau so, wie ich es wollte, aber ich kann nicht herausfinden, wie ich eine Dropdownliste mit dem Nachnamen und Vornamen Werte in der Liste enthalten aufzufüllen.

Der Code wurde zur besseren Lesbarkeit überarbeitet.

3 Stimmen

Ich empfehle, die Mitarbeiter in der Sql-Abfrage zu sortieren, es sei denn, es gibt einen besonderen Grund, dies nicht zu tun.

3voto

James Hill Punkte 58559

Siehe Code unten:

DropDownList ddl = new DropDownList();

ddl.DataSource = employeeList;
ddl.DataTextField = "fullName";
ddl.DataValueField = "emp_Id";

Ich würde auch Ihre Klasse so ändern, dass sie ein Feld für den vollständigen Namen enthält:

public class Employee
{
    public int emp_Id { get; set; }
    public string lastName { get; set; }
    public string firstName { get; set; }
    public string fullName
    {
        get
        { 
            return String.Format("{0} {1}", this.firstName, this.LastName);
        }
    }

    public Employee(int id, string last, string first)
    {
        this.emp_Id = id;
        this.lastName = last;
        this.firstName = first;
    }
}

1voto

rick schott Punkte 20895

Beispiel mit bestehenden Eigenschaften:

<asp:DropDownList id="bla" runat="server"  />

bla.DataSource = employeeList;
bla.DataTextField = "firstName";
bla.DataValueField = "emp_Id"
bla.DataBind(); 

Ich empfehle dies:

<asp:DropDownList id="bla" runat="server"  />

bla.DataSource = employeeList;
bla.DataTextField = "fullName";
bla.DataValueField = "emp_Id"
bla.DataBind();

public class Employee
{
    public int emp_Id;
    public string lastName;
    public string firstName;

    public string fullName get{ return firstName + " " + lastName;}

    public Employee(int id, string last, string first)
    {
        this.emp_Id = id;
        this.lastName = last;
        this.firstName = first;
    }
}

1voto

Hanlet Escaño Punkte 16884

Sie könnten eine zusätzliche Eigenschaft zu Ihrer Klasse hinzufügen, die die 3 Werte enthält, und diese als DataTextField beim Binden der DropDownList verwenden:

Klasse Code

public class Employee
{
    public int emp_Id;
    public string lastName;
    public string firstName;
    public string Text
    {
        get { return this.ToString(); }
    }
    public Employee(int id, string last, string first)
    {
        this.emp_Id = id;
        this.lastName = last;
        this.firstName = first;
    }
    public override string ToString()
    {
        return lastName + " " + firstName + " " + emp_Id;
    }
}

HTML:

List<Employee> employees = new List<Employee>();
ddl.DataSource = employees;
ddl.DataValueField = "emp_Id";
ddl.DataTextField = "Text";
ddl.DataBind();

Viel Glück!

0voto

Chris Felstead Punkte 1170

Warum erstellen Sie nicht eine Eigenschaft mit dem Namen FullName, die "FirstName + ' ' + LastName" erhält? Dann hätten Sie nur ein Feld zu bearbeiten statt zwei.

0voto

marapet Punkte 52074

Wenn Sie keine Änderungen vornehmen wollen oder können Employee können Sie auch etwas in dieser Richtung versuchen:

var data = employee.Select (x =>
    new KeyValuePair<int, string>(
        x.emp_Id,
        string.Format("{0}, {1}", x.lastName, x.firstName)
));

ddl.DataSource = data.ToList();
ddl.DataValueField = "Key";
ddl.DataTextField = "Value";
ddl.DataBind();

Dies kann auch nützlich sein, wenn Sie verschiedene Seiten mit verschiedenen Dropdowns für Mitarbeiter haben, manchmal mit Nachname zuerst, manchmal mit Vorname zuerst, und vielleicht mit und ohne Doppelpunkt dazwischen ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X