Avatar billede stinejh1980 Nybegynder
29. juni 2006 - 17:11 Der er 19 kommentarer og
1 løsning

Oprette drop down med farver

Når min bruger skal vælge en farve vil jeg gerne have at farvekoden bare står der, men at teksten eller baggrund bare er i den pågældende farve.

Jeg bruger ASP.NET og VB.

Min dropdown ser således ud:
<asp:dropdownList id="DropColourCloth1" runat="server" CssClass="dropdown" />

Den bliver genereret her:
StrSQL = "Select * from ClothColour;"
OpenDB()

'response.write(strSQL)
DropColourCloth1.Datasource = objComm.ExecuteReader()
DropColourCloth1.DataValueField = "Value"
DropColourCloth1.DataTextField = "Text"
DropColourCloth1.Databind()

ObjConn.close()

Databasen hvor den bliver hentet fra har denne tekst:
Black-2300
Grey-2328
Red-3106
Pink-3563
Purple-3873
Orange-4163
Yellow-5085
Green-6024
Turquoise-6324
Dark green-6332
Light blue-7247
Blue-7755

Men jeg vil gerne undgå teksten
Avatar billede thomasofdenmark Nybegynder
30. juni 2006 - 08:58 #1
Hvis f.eks "Black-2300" er indholdet af een kolonne f.eks "Text", så er du nødt til at bruge en Split funktion til at fjerne teksten.
Avatar billede stinejh1980 Nybegynder
30. juni 2006 - 13:32 #2
Nej det var ikke det jeg mente.
Jeg vil selv slette teksten, men så ved brugerne jo ikke hvad farve de vælger.
Der for vil jeg have at linien i dropdown hvor der f.eks. står 5085 enten har gul baggrund eller at teksten er gul.
Avatar billede -psycho- Nybegynder
01. juli 2006 - 18:43 #3
Men mon ikke det skulle hjælpe dig på vej, er i hvert fald en mulighed :).

SqlDataReader reader = objComm.ExecuteReader();

while(reader.Read())
{
  string[] coltext = reader["text"].ToString().Split('-');
  string col;

  ListItem item = new ListItem();
  Color color = Color.FromName(coltext[0].Replace(" ", ""));

  if (color.IsKnownColor)
  {
    string red = (color.R == 0) ? "00" : (color.R <= 15 ? "0" + color.R.ToString("X") : color.R.ToString("X"));
    string green = (color.G == 0) ? "00" : (color.G <= 15 ? "0" + color.G.ToString("X") : color.G.ToString("X"));
    string blue = (color.B == 0) ? "00" : (color.B <= 15 ? "0" + color.B.ToString("X") : color.B.ToString("X"));

    col = "#" + red + green + blue;
  }
  else
    col = "#FFFFFF";

  item.Value = reader["Value"];
  item.Text = coltext[1];
  item.Attributes.Add("style", "background-color:" + col + ";");
   
  DropColourCloth1.Items.Add(item);
}

reader.Close();
Avatar billede stinejh1980 Nybegynder
03. juli 2006 - 10:54 #4
Psycho >>
Hvor skal jeg sætte dette ind??
Jeg kan ikke lige genkende kodeformen.

Virker det stadig hvis min Db ser således ud:

Value    Text    Farve
0    Choose    -
1    White    White
2    2300    Black
3    2328    Grey
4    3106    Red
5    3563    Pink
6    3873    Purple
7    4163    Orange
8    5085    Yellow
9    6024    Green
10    6324    Turquoise
11    6332    Dark green
12    7247    Light blue
13    7755    Blue
Avatar billede stinejh1980 Nybegynder
03. juli 2006 - 12:21 #5
Det gør heller ikke noget hvid dropdown kommer til at have en firkant med farven og så koden bagefter.

f.eks så kunne den have en firkant med farven #FF0000 hvor der bagefter stod 3106
Avatar billede -psycho- Nybegynder
03. juli 2006 - 13:21 #6
OK, så farve og text er i hver sin..

Istedet for
DropColourCloth1.Datasource = objComm.ExecuteReader()
DropColourCloth1.DataValueField = "Value"
DropColourCloth1.DataTextField = "Text"
DropColourCloth1.Databind()

Så lav
SqlDataReader reader = objComm.ExecuteReader();

while(reader.Read())
{
  string col;

  ListItem item = new ListItem();
  Color color = Color.FromName(reader["Farve"].ToString().Replace(" ", ""));

  if (color.IsKnownColor)
  {
    string red = (color.R == 0) ? "00" : (color.R <= 15 ? "0" + color.R.ToString("X") : color.R.ToString("X"));
    string green = (color.G == 0) ? "00" : (color.G <= 15 ? "0" + color.G.ToString("X") : color.G.ToString("X"));
    string blue = (color.B == 0) ? "00" : (color.B <= 15 ? "0" + color.B.ToString("X") : color.B.ToString("X"));

    col = "#" + red + green + blue;
  }
  else
    col = "#FFFFFF";

  item.Value = reader["Value"].ToString();
  item.Text = reader["Text"].ToString();
  item.Attributes.Add("style", "background-color:" + col + ";");
 
  DropColourCloth1.Items.Add(item);
}

Du skal dog nok ændre sqldatareader med mindre at du bruger mssql selvfølgelig.

Men bare lige så du ved det. Grey er ikke en kendt farve, er stavet Gray her.
Avatar billede stinejh1980 Nybegynder
05. juli 2006 - 16:14 #7
Nej jeg bruger Access.
Jeg får denne fejl:
Fejlmeddelelse om kompileringsfunktion: BC30451: Navnet 'SqlDataReader' er ikke blevet erklæret.

Kildefejl:



Linje 171:   
Linje 172:          'response.write(strSQL)
Linje 173:SqlDataReader reader = objComm.ExecuteReader();
Linje 174:
Linje 175:while(reader.Read())

Hvilket jeg troede betød at jeg skulle skifte
SqlDataReader ud med ObjRs, da jeg har: Dim objRs As OleDbDataReader

Men så kommer denne fejl:
Fejlmeddelelse om kompileringsfunktion: BC30454: Udtrykket er ikke en metode.

Kildefejl:



Linje 171:   
Linje 172:          'response.write(strSQL)
Linje 173:ObjRs reader = objComm.ExecuteReader();
Linje 174:
Linje 175:while(reader.Read())
Avatar billede stinejh1980 Nybegynder
05. juli 2006 - 16:19 #8
Og det følgende rettelser blev således:
'While' skal afsluttes med 'End While'.
Det gjorde jeg

FEJL:Navnet 'reader' er ikke blevet erklæret.
Jeg ændrede til ObjRs

Fejlmeddelelse om kompileringsfunktion: BC30035: Syntaksfejl.

Kildefejl:



Linje 174:
Linje 175:while(ObjRs.Read())
Linje 176:{
Linje 177:  string col;
Linje 178:

Hvilket betyder at debn ikke godkender {
Avatar billede -psycho- Nybegynder
05. juli 2006 - 16:53 #9
var min fejl havde ikke lige set du bruge VB, det jeg skrev var C#

og i vb bruger man End while og man bruger ikke { }
Avatar billede -psycho- Nybegynder
05. juli 2006 - 16:58 #10
og heller ikke ;
Avatar billede stinejh1980 Nybegynder
06. juli 2006 - 11:47 #11
Nej, men så er jeg åp herrens mark, for jeg kan ikke finde ud af at konvertere
Avatar billede -psycho- Nybegynder
06. juli 2006 - 12:35 #12
Sådan konverteret til VB.

Dim reader As OleDb.OleDbDataReader = objComm.ExecuteReader()

While (reader.Read())

  Dim colstr As String

  Dim item As New ListItem

  Dim col As Color = Color.FromName(reader("Farve").ToString().Replace(" ", ""))

  If col.IsKnownColor Then
    Dim red As String = IIf((col.R = 0), "00", (IIf(col.R <= 15, "0" + col.R.ToString("X"), col.R.ToString("X"))))
    Dim green As String = IIf((col.G = 0), "00", (IIf(col.G <= 15, "0" + col.G.ToString("X"), col.G.ToString("X"))))
    Dim blue As String = IIf((col.B = 0), "00", (IIf(col.B <= 15, "0" + col.B.ToString("X"), col.B.ToString("X"))))

    colstr = "#" & red & green & blue

  Else
    colstr = "#FFFFFF"
  End If

  item.Text = reader("Text").ToString()
  item.Value = reader("Value").ToString()

  item.Attributes.Add("style", "background-color:" + colstr + ";")
 
  DropColourCloth1.Items.Add(item)
End While

reader.Close()
Avatar billede stinejh1980 Nybegynder
07. juli 2006 - 13:53 #13
Det virker fint, Jeg havde allerede dimmet Reader i top så den ændrede jeg lige.
Koden nu:
While (ObjRs.Read())

  Dim colstr As String

  Dim item As New ListItem

  Dim col As Color = Color.FromName(ObjRs("Farve").ToString().Replace(" ", ""))

  If col.IsKnownColor Then
    Dim red As String = IIf((col.R = 0), "00", (IIf(col.R <= 15, "0" + col.R.ToString("X"), col.R.ToString("X"))))
    Dim green As String = IIf((col.G = 0), "00", (IIf(col.G <= 15, "0" + col.G.ToString("X"), col.G.ToString("X"))))
    Dim blue As String = IIf((col.B = 0), "00", (IIf(col.B <= 15, "0" + col.B.ToString("X"), col.B.ToString("X"))))

    colstr = "#" & red & green & blue

  Else
    colstr = "#FFFFFF"
  End If

  item.Text = ObjRs("Text").ToString()
  item.Value = ObjRs("Value").ToString()

  item.Attributes.Add("style", "background-color:" + colstr + ";")
 
  DropColourCloth1.Items.Add(item)
End While

ObjRs.Close()   

Men så får jeg denne fejl:
Fejlmeddelelse om kompileringsfunktion: BC30616: Variablen 'red' skjuler en variabel i en omsluttende blok.

Kildefejl:



Linje 184:
Linje 185:  If col.IsKnownColor Then
Linje 186:    Dim red As String = IIf((col.R = 0), "00", (IIf(col.R <= 15, "0" + col.R.ToString("X"), col.R.ToString("X"))))
Linje 187:    Dim green As String = IIf((col.G = 0), "00", (IIf(col.G <= 15, "0" + col.G.ToString("X"), col.G.ToString("X"))))
Linje 188:    Dim blue As String = IIf((col.B = 0), "00", (IIf(col.B <= 15, "0" + col.B.ToString("X"), col.B.ToString("X"))))
Avatar billede -psycho- Nybegynder
08. juli 2006 - 22:30 #14
Kan jeg nu ikke forstå virker fint her..

Nå men så kan vi da lave dem om til normale if'er, hvis man kan sige det :)

Erstat
Dim red As String = IIf((col.R = 0), "00", (IIf(col.R <= 15, "0" + col.R.ToString("X"), col.R.ToString("X"))))
Dim green As String = IIf((col.G = 0), "00", (IIf(col.G <= 15, "0" + col.G.ToString("X"), col.G.ToString("X"))))
Dim blue As String = IIf((col.B = 0), "00", (IIf(col.B <= 15, "0" + col.B.ToString("X"), col.B.ToString("X"))))

Med

Dim red As String
Dim green As String
Dim blue As String

if col.R = 0 then
  red = "00"
else if col.R <= 15 then
  red = "0" & col.R.ToString("X")
else
  red = col.R.ToString("X")
end if

if col.G = 0 then
  green = "00"
else if col.G <= 15 then
  green = "0" & col.G.ToString("X")
else
  green = col.G.ToString("X")
end if

if col.B = 0 then
  blue = "00"
else if col.B <= 15 then
  blue = "0" & col.B.ToString("X")
else
  blue = col.B.ToString("X")
end if
Avatar billede stinejh1980 Nybegynder
10. juli 2006 - 16:44 #15
Jeg koder i ASP.NET og VB 1.1

Stadig samme fejl:

Fejlmeddelelse om kompileringsfunktion: BC30616: Variablen 'red' skjuler en variabel i en omsluttende blok.

Kildefejl:

Linje 196:           
Linje 197:            If col.IsKnownColor Then
Linje 198:                Dim red As String
Linje 199:                Dim green As String
Linje 200:                Dim blue As String
Avatar billede -psycho- Nybegynder
10. juli 2006 - 17:18 #16
Hmm, prøv at kalde variablen noget andet. end red
Avatar billede stinejh1980 Nybegynder
11. juli 2006 - 11:59 #17
Nu fik jeg det til at virke, var fordi jeg havde brugt de variabler før.

Nu får jeg ikke flere fejlmeddelelser, men farven vises ikke.
Er det måske fordi jeg skal skrive FF0000 i min db istedet for red?
Avatar billede stinejh1980 Nybegynder
03. november 2006 - 11:27 #18
Det virker ikke. Jeg prøver igen.
Er der nogen som kan hjælpe med en farve dropdown?

Den skal være kodet i VB, ASP.NET og Access database.

Jeg skal bruge den i et ordre system, hvor kunder skal vælge farve på produktet.
Det kan også være at jeg kan bruge en i flash hvis den valgte linie en gemmes i databasen sammen med resten af ordreoplysningerne.
Avatar billede stinejh1980 Nybegynder
09. januar 2007 - 14:28 #19
Jeg lukker
Avatar billede stinejh1980 Nybegynder
09. januar 2007 - 14:29 #20
Hvis der ikke er andre som har et bud
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester