webForumDet fria alternativet

två värden till DataTextField

.NET

3 svar · 297 visningar · startad av Dino

Medlem sedan sep. 20011 914 inlägg
Frågan#1
class A
{
   public string AA
   public string BB
   public string CC
}

Har en class som ovan(förkortad version) som läggs i en A collection. Denna collection är datasourcen till en ddl. Vad jag skulle vilja är att ddls DataTextField fick både AA och BB värderna i formatet "{0}¤{1}". Så frågan är hur?

Medlem sedan juni 20019 024 inlägg
#2

1. Bygg en egen DropDownList som kan hantera tre värden.

2. Bygg en ny klass som sammanfogar AA och BB samtidigt som CC är intakt. På så vis får du två värden (ett för DataValueField och ett för DataTextField).

Personligen ska jag försöka bygga en egen CheckBoxList som hanterar just tre värden; value, text och det nya: title. Tycker det borde finnas inbyggt redan från början, men det gör det inte så då har man ju "kraften" att expandera. ;)

Medlem sedan maj 20012 812 inlägg
#3

När du binder till din dropdownList så sätter du att vilket fält/property som skall motsvara Value och Text, typ så här:

class User(){
 private long _Id;
 private string _FirstName;
 private string _LastName;

 public long ID{get{return _Id;}}
 public string FirstName {get{return _FirstName;}}
 public string LastName {get{return _LastName;}}
}

När du sedan binder en collection av User's till en DropDownList så skriver du så här i din kod.

ddlUser.DataTextField = "FirstName";
ddlUser.DataValueField = "Id";
ddlUser.DataSource = UserCollection;
ddlUser.DataBind()

Som du nu märker så får du endast FirstName som Text i din DropDownList och du kan inte skriva:

ddlUser.DataTextField "FirstName" + " " + "Lastname"

Lösningen runt detta problem finns på 2 sätt. Antingen så får du själv lägga till alla items till din dropDownlist så här:

foreach(User user in UserCollection)
ddlUser.Items.Add(new ListItem(user.id.ToString(), user.FirstName + " " + user.LastName));

Eller så gör du den snyggare varianten, du skapar en ny property i din User class, som returnerar hela namnet.

class User{
.
.
. 
public string FullName{
 get{return _FirstName + " " + _LastName;}
}

och i din kod som du binder till DropDownListan så ändrar du bara:

ddlUser.DataTextField = "FullName";

Och nu kommer din dropdownlista att visa Förnamnet och efternamnet som text.

- Magnus

Medlem sedan sep. 20011 914 inlägg
#4

Att göra en egen får vänta, men är en bra ide och har lagt till den till min lista över kontroller att bygga. Har oxå på den listan en dropdownlist med ett itemdatabound event, vilket man kan hoppas komma i v 2.0.
Det smidigast blir nog att göra som Gladh skriver. Tack för svaren. :)

365 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
238 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)