[ASP.NET] tabelrij kleuren

Pagina: 1
Acties:

  • Mesjefskie
  • Registratie: Augustus 2004
  • Laatst online: 23-09-2025

Mesjefskie

If it works, it's true!

Topicstarter
Hallo,

Ik zit met het volgende;

Ik heb een aspx pagina die records uit een database ophaalt en weergeeft. De data wordt weergegeven in een DataList. Voor de volledigheid, hier een deel van de code: (excuses voor de lengte)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
    DataView createTable(bool archive){

        string filter = "";

        DataTable dt = new DataTable();
        DataRow dr;
        dt.Columns.Add(new DataColumn("ID", typeof(int)));
 <KNIP>
        dt.Columns.Add(new DataColumn("Comments", typeof(String)));
        
        if(list.FilterText != ""){
            filter = "AND "+list.FilterType+" LIKE '%"+list.FilterText+"%'";
        }

        string order = "DESC";
        switch(list.Sort){
            case "priority":
                order = "ASC";
            break;
<KNIP>
            case "comments":
                list.Sort = "due";
            break;
        }
        
        bool flag = false;
        item_count = 0;
        myConnection.Open();

        CommandText ="SELECT * FROM "+list.DBName+" WHERE archive = '"+Convert.ToInt32(archive)+"' "+filter+" ORDER BY "+list.Sort+" "+order;
        SqlCommand myCommand = new SqlCommand(CommandText,myConnection);
        SqlDataReader myReader;
        try{
            myReader = myCommand.ExecuteReader();

            while (myReader.Read()) {
                if(item_count < 1000){
                    dr = dt.NewRow();
                    dr[0]= myReader.GetInt32(0);
                    switch(myReader.GetInt32(1)){
                        case 1:
                            dr[1] = "Very High";
                        break;
                        case 2:
                            dr[1] = "High";
                        break;
                        case 3:
                            dr[1] = "Normal";
                        break;
                        case 4:
                            dr[1] = "Low";
                        break;
                        case 5:
                            dr[1] = "Very Low";
                        break;
                        case 6:
                            dr[1] = "Medium";
                        break;
                        case 7:
                            dr[1] = "Daily";
                        break;
                        case 8:
                            dr[1] = "Helpdesk";
                        break;
                    }

                    dr[2]= myReader.GetString(2).Replace("'","'");
                    dr[10] = myReader.GetString(10).Replace("'", "'");
                    dr[3]= myReader.GetString(3);
                    dr[4]= myReader.GetDateTime(4).ToString("dd-MM-yyyy");
                    dr[5]= myReader.GetDateTime(5).ToString("dd-MM-yyyy");
                    dr[6]= myReader.GetString(6);
                    dr[7]= myReader.GetString(7);
                    dr[8]= myReader.GetDateTime(8).ToString("dd-MM-yyyy");
                    if(dr[8].ToString() == "01-01-1900"){
                        dr[8] = "--";
                    }
                    if(!archive){
                        dr[9] += "<a href=\""+Request.Url.AbsolutePath +"?action=Edit&id="+dr[0]+"\">Edit</a></td>\n";
                        dr[9] += "<td>\n";
                        dr[9] += "<input type=\"checkbox\" id=\"checkID["+dr[0]+"]\" name=\"checkID["+dr[0]+"]\">";
                    }else{
                        dr[9] += "<input type=\"checkbox\" id=\"checkID["+dr[0]+"]\" name=\"checkID["+dr[0]+"]\">";
                    }

                    dt.Rows.Add(dr);
                }else{
                    flag = true;
                }
                item_count++;
            }
            myReader.Close();
        }catch(SqlException sqlE){
            new Hills.Io.Error(this.ToString(),2,"[createTable]"+sqlE.Message);
            myConnection.Close();
            return null;
        }
        myConnection.Close();
        letopLabel.Text = "";
        if(flag){
            letopLabel.Text = "Let op: Er worden maar 1000 van de "+item_count+" items weergegeven<br>";
        }

        DataView dv = new DataView(dt);
        return dv;
    }


De uitdaging is nu om voor items met 'Helpdesk' de kleur van de tekst te veranderen in rood en om de tekst als vet weer te geven.

Wat ik tot nu toe heb geprobeerd is om door middel van een stylesheet de tekstkleur en weight aan te passen maar dat is tot nu toe weinig succesvol. Dus iets als en voornamelijk variaties op:

code:
1
2
3
4
5
6
7
8
if(myReader.GetInt32(1) == 8)
   {
   styleLink = "<link href=\"style.css?type=task_alternateStyle\" type=\"text/css\" rel=\"stylesheet\" />";
   }
else
   {
   styleLink = "<link href=\"style.css?type=task_Style\" type=\"text/css\" rel=\"stylesheet\" />";
   }


Maar dat werkt niet. Het resultaat is dat òf álles rood en vet is òf helemaal niets...

Heeft iemand enig idee hoe ik dit anders/beter zou kunnen aanpakken en of het überhaupt wel mogelijk is?

[ Voor 24% gewijzigd door Mesjefskie op 04-04-2006 15:24 . Reden: een deel van de code... ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:37

gorgi_19

Kruimeltjes zijn weer op :9

:? Je wilt toch een css-class gebruiken, waarom voeg je dan een compleet nieuwe stylesheet toe?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:08
Alle code posten is niet nodig, beperk je tot de relevante code.

Heeft een DataList geen OnItemBound event oid dat je hiervoor kan gebruiken ?

https://fgheysels.github.io/


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 19:58

mulder

ik spuug op het trottoir

Je kunt classes in je css file maken, je geeft bv de helpdeskitems de class="red_text". Zie http://www.w3schools.com/css/default.asp

oogjes open, snaveltjes dicht


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 20:29

crisp

Devver

Pixelated

Don Facundo schreef op dinsdag 04 april 2006 @ 15:31:
Je kunt classes in je css file maken, je geeft bv de helpdeskitems de class="red_text". Zie http://www.w3schools.com/css/default.asp
Dat is nou niet bepaald een goede naam voor een class; dan kan je net zo goed een inline style-property gebruiken en doe je dus het hele voordeel van CSS teniet, tenzij je straks met dit soort dingen geconfronteerd wilt worden:
Cascading Stylesheet:
1
.red_text { color: blue; }

:P

Gewoon een classnaam geven dus die de data beschrijft ipv het effect zelf ;)

Intentionally left blank


  • Mesjefskie
  • Registratie: Augustus 2004
  • Laatst online: 23-09-2025

Mesjefskie

If it works, it's true!

Topicstarter
Misschien was ik niet helemaal duidelijk in mijn beschrijving. De uitdaging is om alléén rijen waar de tekst Helpdesk in kolom 2 voorkomt rood te kleuren en vet te maken. De rest mag normaal worden weergegeven... Wat ik dus probeer(de) met die stylesheet is om als de waarde in de kolom 'priority' 8 is, de tekst van de hele rij rood te kleuren en vet te maken. Zonder al te veel succes...

[ Voor 6% gewijzigd door Mesjefskie op 04-04-2006 15:56 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:37

gorgi_19

Kruimeltjes zijn weer op :9

Mesjefskie schreef op dinsdag 04 april 2006 @ 15:55:
Misschien was ik niet helemaal duidelijk in mijn beschrijving. De uitdaging is om alléén rijen waar de tekst Helpdesk in kolom 2 voorkomt rood te kleuren en vet te maken. De rest mag normaal worden weergegeven... Wat ik dus probeer(de) met die stylesheet is om als de waarde in de kolom 'priority' 8 is, de tekst van de hele rij rood te kleuren en vet te maken. Zonder al te veel succes...
Blijft de vraag staan: waarom wijzig je dan de css van de pagina en niet alleen de CSSClass? Hier kan je in OnItemDataBound van je datalist bij, gewoon de Namingcontainer aflopen en dan kom je er vanzelf :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 19:58

mulder

ik spuug op het trottoir

crisp schreef op dinsdag 04 april 2006 @ 15:38:
[...]

Dat is nou niet bepaald een goede naam voor een class; dan kan je net zo goed een inline style-property gebruiken en doe je dus het hele voordeel van CSS teniet, tenzij je straks met dit soort dingen geconfronteerd wilt worden:
Cascading Stylesheet:
1
.red_text { color: blue; }

:P

Gewoon een classnaam geven dus die de data beschrijft ipv het effect zelf ;)
Je hebt compleet gelijk, het zal eerder iets van even-row en odd-row zijn (en geen underscore! :P)

oogjes open, snaveltjes dicht


  • Mesjefskie
  • Registratie: Augustus 2004
  • Laatst online: 23-09-2025

Mesjefskie

If it works, it's true!

Topicstarter
whoami schreef op dinsdag 04 april 2006 @ 15:29:
Alle code posten is niet nodig, beperk je tot de relevante code.

Heeft een DataList geen OnItemBound event oid dat je hiervoor kan gebruiken ?
Dankzij je opmerking over OnItemBound ben ik in ieder geval al een stuk verder, bedankt! Ik heb het nu via een DataGrid al wel 'voor elkaar' maar op de een of andere manier lukt het met een DataList niet?

Dit is de code die ik gebruik voor het DataGrid:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 void ChangeRowFont(Object sender, DataGridItemEventArgs e)
    {
       if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
        {
           if(e.Item.Cells[1].Text == "Helpdesk")
            {
                e.Item.Cells[1].BackColor = System.Drawing.Color.Red;
                e.Item.Cells[1].Font.Bold = true;
            }
           else
           {
           }
        }
    }

Maar voor een DataList werkt dit niet. Iemand enig idee wat ik hier mis / fout doe?

Nogmaals bedankt voor de hulp!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:37

gorgi_19

Kruimeltjes zijn weer op :9

Ram eens op F5 en kijk eens in je debugger naar de waarden die je op dat moment hebt? :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Mesjefskie
  • Registratie: Augustus 2004
  • Laatst online: 23-09-2025

Mesjefskie

If it works, it's true!

Topicstarter
gorgi_19 schreef op donderdag 06 april 2006 @ 13:59:
Ram eens op F5 en kijk eens in je debugger naar de waarden die je op dat moment hebt? :)
Dat debuggen gaat niet zo lekker in Visual Web Developer 2005 Expr... :+ Maar Google doet wonderen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
    void ChangeRowFont(Object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
        DataRowView drv = (DataRowView)e.Item.DataItem;
        
        if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
        {
            if (drv.Row["Priority"].ToString() == "Helpdesk" && drv.Row["Status"].ToString() != "Completed")
            {
                e.Item.BackColor = System.Drawing.Color.Red;
                e.Item.Font.Bold = true;
            }
        }
    }


Het enig waar ik nu nog tegen aan loop is dat alleen het éérste item in de rij rood gekleud wordt en als bold wordt weergegeven...

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 19:58

mulder

ik spuug op het trottoir

Kennelijk styled hij de <td>, en je wilt z'n parent stylen de <tr>. De e.Item word vertaalt naar een row <tr><td>item 1</td><td>item 2</td></tr>. Daar wil je op in springen. 2 links die je misschien op weg helpen:
http://msdn.microsoft.com...lTemplatesDynamically.asp
http://aspalliance.com/116

oogjes open, snaveltjes dicht

Pagina: 1