Toon posts:

[ASP.NET] Styleddropdownlist classe compileren & gebruiken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Na een paar uurtjes ruzien met een dropdownlist vanmiddag (lees hier ) , over het gebruik van meerder kleuren binnen 1 dropdownlist.
Uit eindelijk bleek dit dus absoluut niet mogelijk en ik ben verder gegaan met de link naar een topic op dotnet247 welke gorgi_19 postte.

Nou ben ik een onwijze asp.net n00b en zit al helemaal te smilen dat ik een dll heb gemaakt :) maar ik snap er verder weinig van.

Wat heb ik gemaakt:

Styleddropdown.vb
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
Imports Microsoft.VisualBasic
Imports System
Imports System.Data
Imports System.Drawing
Imports System.IO
Imports System.Text
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports system.collections

Namespace aspnetian

public class StyledDropDownList
    inherits DropDownList 
    protected overrides sub RenderContents(Writer As HtmlTextWriter)
        
        dim C as Integer
        for c=0 TO Items.Count
    
            dim i as Listitem = Items(c)
            writer.WriteBeginTag("option")
            if i.Selected then
                writer.WriteAttribute("selected","selected",false)
            else
                writer.WriteAttribute("value",i.Value,true)
            end if
            dim d as IEnumerator = Items(c).Attributes.Keys.GetEnumerator()
            while d.MoveNext()
                writer.WriteAttribute(d.Current.ToString(),Items(c).Attributes(d.Current.ToString()))
            end while
            writer.Write(">")
            System.Web.HttpUtility.HtmlEncode(i.Text,writer)
            writer.WriteEndTag("option")
            writer.WriteLine()
        Next
    end sub
end class


In een dosbox deed ik het volgende:
code:
1
2
3
4
5
6
7
8
9
D:\Begeer\class>vbc /t:library /out:bin\styleddropdown.dll /r:System.dll,system.
drawing.dll,system.data.dll,system.drawing.dll,mscorlib.dll,system.web.dll style
ddropdown.vb
Microsoft (R) Visual Basic .NET Compiler version 7.00.9466
for Microsoft (R) .NET Framework version 1.00.3705.288
Copyright (C) Microsoft Corporation 1987-2001. All rights reserved.


D:\Begeer\class>


in de D:\Begeer\class\Bin staat nu de file: styleddropdown.dll

Ik heb voor de test de volgende file gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ Page Language="vb" Debug="True" %>
<%@ Register TagPrefix="aspnetian" Namespace="aspnetian" Assembly="styleddropdown" %>

<script runat="server">
</script>

<HTML>
<BODY>
<form runat="server">
    <aspnetian:StyledDropDownList id="YES" runat="server" />
</form>
</BODY>
</HTML>


en ik krijg de volgende error:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Compilation Error 
Description: An error occurred during the compilation of a resource required to 
service this request. Please review the following specific error details and modify 
your source code appropriately. 

Compiler Error Message: BC30560: 'StyledDropDownList' is ambiguous in the namespace 'aspnetian'.

Source Error:

 

Line 8:  <BODY>
Line 9:  <form runat="server">
Line 10:    <aspnetian:StyledDropDownList showdividers="False" id="YES" runat="server" />
Line 11: </form>
Line 12: </BODY>


Wat bedoelen ze met ambiguous? Is mijn hele dll onzin of is er iets anders mis?

Hoop dat iemand me verder kan helpen!! :)

[ Voor 46% gewijzigd door Verwijderd op 27-12-2002 20:51 ]


Verwijderd

als je vs.net gebruikt even bij references deze dll add'en

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Anders moet je hem waarschijnlijk bij het compilen referencen..

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 25-08 13:24

gorgi_19

Kruimeltjes zijn weer op :9

De class komt twee maal voor in de namespace. Heb je 2x dezelfde dll (evt. onder een andere naam) of de dll + reference ernaar in de bin folder staan?

Verder kan ik het niet beter uitleggen dan:
http://dotnet247.com/247reference/msgs/9/46736.aspx

[ Voor 25% gewijzigd door gorgi_19 op 27-12-2002 23:58 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Zo wintersport achter de rug, niets gebroken alleen mijn knie een beetje verdraaid :+, en ga weer verder waar ik gebleven was.

Ik heb de styleddropdown nu als volgt aangeroepen en gevuld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ Page Language="vb" Debug="True" %>
<%@ Register TagPrefix="dropdown" Namespace="aspnetian" Assembly="styleddropdown" %>

<script runat="server">
Sub Page_Load(Sender As Object, E As EventArgs)
    dropdown1.Items.Add(new ListItem("Item1","1"))
    dropdown1.Items.Add(new ListItem("Item2","2"))
end sub
</script>

<HTML>
<BODY>
<form runat="server">
    <dropdown id="dropdown1" runat="server" />
</form>
</BODY>
</HTML>


Ik krijg nu geen ambigous errors meer en als ik hem niet probeer te vullen opent hij een mooie witte pagina :)

Maar op de dropdown1.Items.Add gaat hij onderuit :(
code:
1
'Items' is not a member of 'System.Web.UI.HtmlControls.HtmlGenericControl'.


Is de code van de class die ik heb gevonden gewoon niet up to the job, of ben ik toch een paar keer teveel gevallen met boarden? :P

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 25-08 13:24

gorgi_19

Kruimeltjes zijn weer op :9

Ik denk het laatste.. :+

dropdown --> asp:dropdownlist

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
hahaha ook goeie morgen! ;)

Ik ga natuurlijk wel verder met de bovenstaande code! :+

code:
1
<%@ Register TagPrefix="dropdown" Namespace="aspnetian" Assembly="styleddropdown" %>


Ik maak dus geen gebruik van de normale asp:dropdownlist omdat ik daar niet voor ieder item een kleur kan aangeven!

Zie bovenstaande class....

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 25-08 13:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 15 januari 2003 @ 10:03:
hahaha ook goeie morgen! ;)

Ik ga natuurlijk wel verder met de bovenstaande code! :+

code:
1
<%@ Register TagPrefix="dropdown" Namespace="aspnetian" Assembly="styleddropdown" %>


Ik maak dus geen gebruik van de normale asp:dropdownlist omdat ik daar niet voor ieder item een kleur kan aangeven!

Zie bovenstaande class....
owke, dan dropdown:classnamewaardecodeinstaat

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
nee dat is het volgens mij ook niet, dan krijg ik weer de voglende error:
code:
1
BC30560: 'StyledDropDownList' is ambiguous in the namespace 'aspnetian'.


code:
1
<dropdown:StyledDropDownList id="dropdown1" runat="server" />


Oooh doh zou het kunnen komen omdat ik een keer verkeerd gecompiled heb maar die file laten staan in de bin directory?
Ik spreek hem wel niet aan maar hij zit in dezelfde namespace met een zelfde functie naam?

Ik heb die dll weg gehaald en nu krijg ik weer een andere error, brb ;)

Verwijderd

Topicstarter
*zucht*

ik krijg nu deze error, maar ben bang dat jullie hier ook niet veel mee kunnen...
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
Server Error in '/test' Application.
--------------------------------------------------------------------------------

Index was out of range. Must be non-negative and less than the size of the
 collection. 
Parameter name: index 
Description: An unhandled exception occurred during the execution of the current 
web request. Please review the stack trace for more information about the error 
and where it originated in the code. 

Exception Details: System.ArgumentOutOfRangeException: Index was out of 
range. Must be non-negative and less than the size of the collection. Parameter 
name: index


Source Error: 

An unhandled exception was generated during the execution of the current web 
request. Information regarding the origin and location of the exception can be 
identified using the exception stack trace below.  

Stack Trace: 


[ArgumentOutOfRangeException: Index was out of range.  
Must be non-negative and less than the size of the collection.

Parameter name: index]
   System.Collections.ArrayList.get_Item(Int32 index) +91
   System.Web.UI.WebControls.ListItemCollection.get_Item(Int32 index) +10
   aspnetian.StyledDropDownList.RenderContents(HtmlTextWriter Writer) +77
   System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) +29
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +72
   System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer) +44
   System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output) +395
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +72
   System.Web.UI.Control.Render(HtmlTextWriter writer) +7
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
   System.Web.UI.Page.ProcessRequestMain() +1900

[ Voor 3% gewijzigd door Verwijderd op 15-01-2003 10:47 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 25-08 13:24

gorgi_19

Kruimeltjes zijn weer op :9

Ah jawel hoor.. In je code in je beginpost zit een fout... :+

Hint: aan arraylist begint te tellen bij 0

Als je dus 5 getallen in een arraylist stopt, komen deze op de index van 0 .... 4
Echter, als je de count property gebruikt, krijg je weer 5 terug.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
w0000000000000tneeezzzzzzzzz!!!!!!!!!!!!!!!!!!!!!!!

Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt! Het werkt!

heb 2 kleuren in een styleddropdownlist!!!

OMG

*vreugdedansje*

Nou snel kijken of het ook ergens anders dan in mijn test.aspx wil werken

MY GOD DIT IS GAAAFFF

THNX gorgi_19

Verwijderd

Topicstarter
_/-\o_ gorgi_19 _/-\o_

Thnx ik ben echt volmaakt gelukkig :)

Verwijderd

Topicstarter
gorgi ik heb die regel verander in: for c=0 TO ( Items.Count-1 ) , het werkt wel maar ik krijg nu in een ander stuk code waar ik deze pulldown gebruik te maken met vage dingen :(

klopt het dat ik deze regel heb aangepast op deze manier?
of loop het nu gewoon door mijn aanpassing in de soep? :'(

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 25-08 13:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 15 January 2003 @ 16:59:
gorgi ik heb die regel verander in: for c=0 TO ( Items.Count-1 ) , het werkt wel maar ik krijg nu in een ander stuk code waar ik deze pulldown gebruik te maken met vage dingen :(

klopt het dat ik deze regel heb aangepast op deze manier?
of loop het nu gewoon door mijn aanpassing in de soep? :'(
Definieer eens vage dingen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
sorry dat ik alles post maar ik kan het anders niet duidelijk uitleggen ben ik bang....

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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
<%@ Control Language="vb" Debug="True" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="microsoft.Data.Odbc" %>
<%@ Register TagPrefix="dropdown" Namespace="aspnetian" Assembly="styleddropdown" %>
<script runat="server">
    'dbconneCtie
    dim objConn as new ODBCConnection ("XXXXX")
    
    'globale variabelen
    'MenuCount wordt gebruikt in check in Showmenu
    dim menuCount as Integer
    dim parent as Integer = 0
    dim menu_array() As menu_items
    
    'PageLoad
    Sub Page_Load(Sender As Object, E As EventArgs)
    
        'Eenmalig uit te voeren
        if not page.IsPostback() then           
            'Laad de taal in de taal pulldown, getoond in het overzicht van de menu items.
            Dim query_get_taal as string =  "Select * from taal"
        
            Dim taal_reader as OdbcDataReader
            Dim obj_taal as neW OdbcCommand ( query_get_taal, objConn)
            
            objConn.Open()
                taal_reader = obj_taal.ExecuteReader()
                dim z as integer = 0
                while taal_reader.read()
                    dim li = new ListItem(""& taal_reader.item("taal_naam") &"",""& taal_reader.item("taal_id") &"")
                    li.Attributes.Add( "style","color:red" )
                    taal.Items.Insert( z, li )
                    z+=1
                end while
            objConn.Close()
        end if
        
        'Haal de gekozen taal op uit het taal pulldownmenu (gebruik straks in query)
        dim taal_select as Integer
        if taal.selecteditem.value <> "" then
            taal_select = taal.SelectedItem.Value
        else
            taal_select = 1
        end if
        
        'query menu items
        dim query_menu_items as String
        query_menu_items = "select menu_id, menu_naam, menu_parent, menu_toon from menu where taal_id="& taal_select &" order by menu_sortering"
        
        'array indexer
        dim i as Integer = 0
        ReDim Preserve menu_array(0)
        
        'Open DB connectie en voer query uit
        objConn.open()
        
            Dim result_menu_items as new OdbcCommand ( query_menu_items, objConn)
            dim reader_menu_items as OdbcDataReader = result_menu_items.ExecuteReader()
            
            while reader_menu_items.Read()
                'maak nieuw array item aan
                ReDim Preserve menu_array(i)
                menu_array(i) = New menu_items()
                menu_array(i).menu_id = reader_menu_items.item("menu_id")
                menu_array(i).menu_naam = reader_menu_items.item("menu_naam")
                menu_array(i).menu_parent = reader_menu_items.item("menu_parent")
                menu_array(i).menu_toon = reader_menu_items.item("menu_toon")
                'array indexer ophogen
                i += 1
            end while
        
        objConn.close()
        
        if i > 0 then
            menuCount = ubound(menu_array)
        else
            menuCount = -1
        end if
        
        ' en toon menu
        ShowMenu( 0, 0, 1 )
    end sub
    
    'functies + klasse
    public class menu_items
        public menu_id as Integer
        public menu_naam as String
        public menu_parent as Integer
        public menu_soorteer as Integer
        public menu_toon as Integer
    end class
    
    Sub ShowMenu(parent, level, visible)
        Dim i, j
        
        'als er items zijn
        if menuCount > -1 then
            ' ga alle items af in array
            For i = 0 To menuCount
        
                ' is de parent van dit item opgegeven item, dan op scherm zetten
                ' en deze als parent gaan doorlopen
                If menu_array(i).menu_parent = parent then
                    ' spaties of whatever om niveau aan te geven
                    if level >= 1 then
                        For j = 0 to level
                            'menu_overzicht = overzicht van de menu items
                            menu_overzicht.Controls.add(ParseControl("&nbsp;&nbsp;&nbsp;"))
                        Next
                    end if
                    
                    ' zet naam van item op scherm
                    if level >= 1 and level mod 2 = 0 then
                        Dim ctl_LinkButton As New LinkButton() 
                        ctl_LinkButton.ID = menu_array(i).menu_id  
                        'CommandArgument = menu_naam (abuse)
                        ctl_LinkButton.CommandArgument = menu_array(i).menu_naam 
                        
                        ctl_LinkButton.Text = menu_array(i).menu_naam &"<br>"  
                        
                        'bepaal kleur
                        if menu_array(i).menu_toon = 1 and visible = 1 then
                            menu_overzicht.Controls.add(ParseControl(" - "))
                            ctl_LinkButton.CssClass = "menu_item"
                        else
                            menu_overzicht.Controls.add(ParseControl("<font color=""gray""> - </font>"))
                            ctl_LinkButton.CssClass = "menu_item_hidden"
                        end if
                        
                        AddHandler ctl_LinkButton.Click, AddressOf item_select_click
                        menu_overzicht.Controls.Add(ctl_LinkButton)
                    elseif level >= 1 and level mod 2 = 1 then
                        Dim ctl_LinkButton As New LinkButton() 
                        ctl_LinkButton.ID = menu_array(i).menu_id 
                        'CommandArgument = menu_naam (abuse)
                        ctl_LinkButton.CommandArgument = menu_array(i).menu_naam 
                        ctl_LinkButton.Text = menu_array(i).menu_naam &"<br>" 
                        
                        'bepaal kleur
                        if menu_array(i).menu_toon = 1 and visible = 1 then
                            menu_overzicht.Controls.add(ParseControl(" * "))
                            ctl_LinkButton.CssClass = "menu_item"
                        else
                            menu_overzicht.Controls.add(ParseControl("<font color=""gray""> * </font>"))
                            ctl_LinkButton.CssClass = "menu_item_hidden"
                        end if
                        
                        AddHandler ctl_LinkButton.Click, AddressOf item_select_click
                        menu_overzicht.Controls.Add(ctl_LinkButton) 
                    else
                        Dim ctl_LinkButton As New LinkButton() 
                        ctl_LinkButton.ID = menu_array(i).menu_id 
                        'CommandArgument = menu_naam (abuse)
                        ctl_LinkButton.CommandArgument = menu_array(i).menu_naam 
                        ctl_LinkButton.Text = menu_array(i).menu_naam &"<br>"   
                        
                        'bepaal kleur
                        if menu_array(i).menu_toon = 1 and visible = 1 then
                            ctl_LinkButton.CssClass = "menu_item"
                        else
                            ctl_LinkButton.CssClass = "menu_item_hidden"
                        end if
                        
                        AddHandler ctl_LinkButton.Click, AddressOf item_select_click
                        menu_overzicht.Controls.Add(ctl_LinkButton) 
                    end if
                    
                    ' ga verder met dit item als parent (en verhoog level)
                    if menu_array(i).menu_toon = 1 AND visible = 1 then
                        ShowMenu( menu_array(i).menu_id, level + 1, 1 )
                    else
                        ShowMenu( menu_array(i).menu_id, level + 1, 0 )
                    end if
                end If
            Next
        end if
    End Sub
    
    'Knop afhandelingen
    sub item_select_click(sender As Object, e As EventArgs)
        response.write( "nou nou was dat nou zo moeilijk?" )
    end sub

</script>
<table height="100%" cellspacing="0" cellpadding="0" width="100%" border="0">
    <tr>
        <td class="test" valign="top" width="100%" bgcolor="#ffffff" height="100%">
            <table cellspacing="0" cellpadding="0" width="100%" border="0">
            <tr>
                <td width="5">[img]"images/site/dummy.gif"[/img]</td>
                <td width="100%">
                    <!-- Pagina Content -->
                    <table cellspacing="0" cellpadding="0" width="100%" border="0">
                    <!-- Pagina titel -->
                    <tr>
                        <td height="29" class="main_title">Menu items Overzicht</td>
                    </tr>
                    <tr>
                        <td width="100%" height="6" valign="top">[img]"images/site/main_lijn_465x1.gif"[/img]</td>
                    </tr>
                    <!-- END: Pagina titel -->
                    <tr>
                        <form runat="server">
                            <td width="100%" height="100%" id="td_overzicht" runat="server" visible="true">
                                Via deze module kunt u zeer eenvoudig de menu structuur bekijken en wanneer gewenst een element wijzigen.
                                <P>
                                Selecteer de taal waarvan u de menu structuur wilt bekijken:<br> 
                                <font size=-2>( Let op, grijze items worden niet getoond op de website dit zijn verborgen items! )</font>
                                <P> 
                                <dropdown:StyledDropDownList id="taal" runat="server" AUTOPOSTBACK="True" /><br>
                                [img]"images/site/main_lijn_465x1.gif"[/img]
                                <p>
                                <asp:PlaceHolder id="menu_overzicht" runat="server" />
                            </td>
                        </form>
                    </tr>
                    </table>
                    <!-- END: Pagina Content -->
                </td>
            </tr>
            </table>       
        </td>
    </tr>
</table>


dit is de code (gestript) die ik gebruik om een menu item te wijzigen.
De situatie is als volgt:
De gebruiker kiest een taal, aan de hand van die taal wordt de placeholder menu_overzicht geladen via de showmenu functie. Er worden dus een heel rijtje linkbuttons als een boomstructuur neergezet.

Als er op een linkbutton wordt geklikt wordt de item_select_click aangeroepen welke in de niet gestripte versie de details van het item toont. In dit geval toont hij alleen nou nou was dat nou zo moeilijk.

Voor Nederlandse items (taal_id =1 ) werkt dit perfect, maar bij een andere taal springt hij gewoon terug naar het nederlandse overzicht zonder ook maar de item_select_click uit te voeren :?

Ik snap er echt geen moer van, want als ik in de code de taal hard op 2 (engels) zet werkt het wel.

De "vaagheid" wordt voor mij compleet op het moment dat ik de <dropdown:StyledDropDownList id="taal" runat="server" AUTOPOSTBACK="True" /> vervang door <asp:DropDownList id="taal" runat="server" AUTOPOSTBACK="True" />, want dan werkt de code perfect :'(

Wat is er nou wezenlijk anders aan de styleddropdownlist tegenover de gewone asp:dropdownlist?

Verwijderd

Topicstarter
is er iemand die me hiermee verder kan helpen?
of moet ik het bijltje er maar bij neergooien? :'(

Verwijderd

Ik ken die dropdown:StyledDropDownList niet.. maar weet je zeker dat die een event raised waarmee je item_select_click wordt aangeroepen?

Verwijderd

Topicstarter
ja de styleddropdownlist is een afgeleide klasse van de dropdownlist (zie eerste post met de code) maar hij werkt toch niet helemaal naar behoren ben ik bang
Pagina: 1