webForumDet fria alternativet

DotNetNuke DroDown.Bind()

32 svar · 1 828 visningar · startad av MickeA.com

MickeA.comMedlem sedan feb. 20034 441 inlägg
#1

Hej,

Försöker fylla en dropdownlista med de språk som finns tillgängliga i en DNN Portal.

Såhär har jag gjort:

<%@ Import namespace="DotNetNuke"%>
<%@ Import namespace="DotNetNuke.Common"%>
<%@ Import namespace="DotNetNuke.Common.Utilities"%>
<%@ Import namespace="DotNetNuke.UI.Utilities"%>

...

<script runat="server">
void Page_Load(System.Object sender, System.EventArgs e)
{
   [b][red]ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales.Keys;[/red][/b]
   ddlFeedLanguage.DataBind();
}
</script>

...

<asp:DropDownList ID="ddlFeedLanguage" runat="server" Visible="False" AutoPostBack="true"></asp:DropDownList>

Men jag får felet:

'DotNetNuke.Services.Localization.Localization.GetEnabledLocales()'+is+a+'method'%2c+which+is+not+valid+in+the+given+context

Vad har jag gjort för fel? Har ett fungerande exempel i VB.NET som ser ut såhär:

With ddlFeedLanguage
   .DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales.Keys
   .DataBind()
   .Items.Insert(0, New ListItem("-All-"))
End With

...

<asp:DropDownList ID="ddlFeedLanguage" runat="server" Visible="False" AutoPostBack="true"></asp:DropDownList>

Jag ska försöka åstadkomma samma sak i C# nu, men förstår inte vad jag gör för fel.

Tack,

NETworkMedlem sedan juni 20011 732 inlägg
#2

Är GetEnabledLocales en metod? Vad returnerar den? Prova detta:

ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().Keys

eller

[Type] Locales =  DotNetNuke.Services.Localization.Localization.GetEnabledLocales();
ddlFeedLanguage.DataSource = Locales.Keys
MickeA.comMedlem sedan feb. 20034 441 inlägg
johaseoMedlem sedan maj 2009250 inlägg
#4

Den här koden fungerar utmärkt ... men den är i VB.net förstås ;)

Imports System.Web.UI
Imports System.Collections.Generic
Imports System.Reflection

Imports DotNetNuke
Imports DotNetNuke.Services.Exceptions
Imports DotNetNuke.Services.Localization

Namespace ITansvar.Modules.TestModule

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' The ViewTestModule class displays the content
    ''' </summary>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Partial Class ViewTestModule
        Inherits Entities.Modules.PortalModuleBase
        Implements Entities.Modules.IActionable

#Region "Event Handlers"

        ''' -----------------------------------------------------------------------------
        ''' <summary>
        ''' Page_Load runs when the control is loaded
        ''' </summary>
        ''' <remarks>
        ''' </remarks>
        ''' <history>
        ''' </history>
        ''' -----------------------------------------------------------------------------
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Try
                Dim objTestModules As New TestModuleController
                Dim colTestModules As List(Of TestModuleInfo)

                ' get the content from the TestModule table
                colTestModules = objTestModules.GetTestModules(ModuleId)

                If colTestModules.Count = 0 Then
                    ' add the content to the TestModule table
                    Dim objTestModule As TestModuleInfo = New TestModuleInfo
                    objTestModule.ModuleId = ModuleId
                    objTestModule.Content = Localization.GetString("DefaultContent", LocalResourceFile)
                    objTestModule.CreatedByUser = Me.UserId
                    objTestModules.AddTestModule(objTestModule)
                    ' get the content from the TestModule table
                    colTestModules = objTestModules.GetTestModules(ModuleId)
                End If

                ' bind the content to the repeater
                lstContent.DataSource = colTestModules
                lstContent.DataBind()

                ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales.Keys
                ddlFeedLanguage.DataBind()

                '                ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales.Keys;
                'ddlFeedLanguage.DataBind();

            Catch exc As Exception        'Module failed to load
                ProcessModuleLoadException(Me, exc)
            End Try
        End Sub

        Protected Sub lstContent_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles lstContent.ItemDataBound
            Dim strContent As String = ""

            ' add content to template
            If CType(Settings("template"), String) <> "" Then
                strContent = CType(Settings("template"), String)
                Dim objProperties As ArrayList = Common.Utilities.CBO.GetPropertyInfo(GetType(TestModuleInfo))
                Dim intProperty As Integer
                Dim objPropertyInfo As PropertyInfo
                For intProperty = 0 To objProperties.Count - 1
                    objPropertyInfo = CType(objProperties(intProperty), PropertyInfo)
                    strContent = strContent.Replace("[" & objPropertyInfo.Name.ToUpper & "]", DataBinder.Eval(e.Item.DataItem, objPropertyInfo.Name).ToString())
                Next intProperty
            Else
                strContent = DataBinder.Eval(e.Item.DataItem, "Content")
            End If

            ' assign the content
            Dim lblContent As Label = CType(e.Item.FindControl("lblContent"), Label)
            lblContent.Text = strContent
        End Sub

#End Region

#Region "Optional Interfaces"

        ''' -----------------------------------------------------------------------------
        ''' <summary>
        ''' Registers the module actions required for interfacing with the portal framework
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        ''' <history>
        ''' </history>
        ''' -----------------------------------------------------------------------------
        Public ReadOnly Property ModuleActions() As Entities.Modules.Actions.ModuleActionCollection Implements Entities.Modules.IActionable.ModuleActions
            Get
                Dim Actions As New Entities.Modules.Actions.ModuleActionCollection
                Actions.Add(GetNextActionID, Localization.GetString(Entities.Modules.Actions.ModuleActionType.AddContent, LocalResourceFile), Entities.Modules.Actions.ModuleActionType.AddContent, "", "", EditUrl(), False, Security.SecurityAccessLevel.Edit, True, False)
                Return Actions
            End Get
        End Property

#End Region

    End Class

End Namespace
MickeA.comMedlem sedan feb. 20034 441 inlägg
#5

Det här funkar fint:

<script runat="server">
void Page_Load(System.Object sender, System.EventArgs e)
{
   ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().AllKeys;
   ddlFeedLanguage.DataBind();
}
</script>

...

<telerik:RadComboBox ID="ddlFeedLanguage" runat="server" Width="180px" />

Men nu skrivs ju alla locales ut i listan (en-US, sv.SE ..).
Om jag istället vill skriva ut deras namn, dvs. English, Svenska osv. hur gör jag då? Det bör väl gå att lösa genom att loopia igenom DotNetNuke.Services.Localization.Localization.GetEnabledLocales() istället, men hur bör koden se ut?

johaseoMedlem sedan maj 2009250 inlägg
#6

Konstigt .... efter att först kört detta exempel:

ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().AllKeys;
ddlFeedLanguage.DataBind();

så bytte jag tillbaks till det tidigare ej fungerande exemplet som nu fungerar!!!

ddlFeedLanguage.DataSource =DotNetNuke.Services.Localization.Localization.GetEnabledLocales().Keys ;
ddlFeedLanguage.DataBind();
MickeA.comMedlem sedan feb. 20034 441 inlägg
#7

Båda dom där funkar för mig.
Men jag måste ha ut allt som en array eller så, så att jag får ut "Locale" och även "Nativ name".

Förslag?

Ett tips, använd gärna [kod ][/ kod] taggen när du postar kod, så går den att läsa!

johaseoMedlem sedan maj 2009250 inlägg
#8

Jag skulle använda:

                System.Globalization.CultureInfo objCultureInfo 
                                              = new System.Globalization.CultureInfo("sv-SE");

där har du :

objCultureInfo.DisplayName="Svenska (Sverige)"
objCultureInfo.EnglishName="Swedish (Sweden)"
MickeA.comMedlem sedan feb. 20034 441 inlägg
#9

Okej, så här ser det ut:

<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>

<script runat="server">

void Page_Load(System.Object sender, System.EventArgs e)
{
   ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().AllKeys;
   ddlFeedLanguage.DataBind();
}
</script>

...

<telerik:RadComboBox ID="ddlFeedLanguage" runat="server" Width="180px">
   <Items>
     <telerik:RadComboBoxItem Text="RadComboBox" ImageUrl="Img/ComboboxPr.gif" runat="server"></telerik:RadComboBoxItem>
     <telerik:RadComboBoxItem Text="RadComboBox" ImageUrl="Img/ComboboxPr.gif" runat="server"></telerik:RadComboBoxItem>
     <telerik:RadComboBoxItem Text="RadComboBox" ImageUrl="Img/ComboboxPr.gif" runat="server"></telerik:RadComboBoxItem>
   </Items>
</telerik:RadComboBox>

Jag måste alltså loopa igenom DotNetNuke.Services.Localization.Localization.GetEnabledLocales().Keys; och sen ange en ny CultureInfo varje varv på loopen. Men hur skriver jag ut telerikkoden? Är det sånt här man använder Eval() till?

Jag är mer eller mindre grön på C# så skulle uppskatta lite hjälp på traven.

Tack!

johaseoMedlem sedan maj 2009250 inlägg
#10

bara för att du är Djurgårdare och jag därmed tycker synd om er pga eran tabellplacering så skall jag skriva koden till dig ... ett ögonblick

MickeA.comMedlem sedan feb. 20034 441 inlägg
#11

johaseo skrev:

bara för att du är Djurgårdare och jag därmed tycker synd om er pga eran tabellplacering så skall jag skriva koden till dig ... ett ögonblick

Man tackar man tackar.. :) Har inte så bra koll på Svensk fotboll längre, får börja hålla på Sliema Wanderers istället!

johaseoMedlem sedan maj 2009250 inlägg
#12
        Protected Sub ddlFeedLanguage_DataBound(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ddlFeedLanguage.DataBound
            Dim ddlFeedLanguage As DropDownList
            ddlFeedLanguage = CType(sender, DropDownList)
            Dim i As Integer
            For i = 0 To ddlFeedLanguage.Items.Count - 1
                Dim objListItem As New ListItem
                objListItem = ddlFeedLanguage.Items(i)
                Dim objCultureInfo As New System.Globalization.CultureInfo(objListItem.Text)
                objListItem.Text = objCultureInfo.DisplayName
            Next
            Dim kalle As Integer = 0
        End Sub

ursäkta men en kund ringde .... och det gick fortare för mig i VB.Net .... varför skriver du dotnetnuke i C# förresten ? dotnetnuke finns ju mestadels i VB.Net kod

MickeA.comMedlem sedan feb. 20034 441 inlägg
#13

Tack ska du ha.. Får försöka skriva om det till C#, eftersom resten av sidan är C#. Anledningen till det är att vår tredjepartleverantör som levererar våra specialmoduler gör allt i C#.

Jag som normalt sysslar med PHP tycker C# har skönare syntax, därför kör jag hellre C#.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#14

Nått sånt här blir det översatt:

protected void ddlFeedLanguage_DataBound(System.Object sender, System.EventArgs e)
{
   DropDownList ddlFeedLanguage = default(DropDownList);
   ddlFeedLanguage = (DropDownList)sender;
   int i = 0;
   for (i = 0; i <= ddlFeedLanguage.Items.Count - 1; i++) {
     ListItem objListItem = new ListItem();
     objListItem = ddlFeedLanguage.Items(i);
     System.Globalization.CultureInfo objCultureInfo = new System.Globalization.CultureInfo(objListItem.Text);
     objListItem.Text = objCultureInfo.DisplayName;
   }
   int kalle = 0;
}

Men ska jag fortfarande ha kvar:

void Page_Load(System.Object sender, System.EventArgs e)
{
   ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().Keys;
   ddlFeedLanguage.DataBind();
}

?

Förstår inte riktigt hur det här hänger ihop.

johaseoMedlem sedan maj 2009250 inlägg
#15
        protected void ddlFeedLanguage_DataBound(object sender, System.EventArgs e)
        {
            DropDownList ddlFeedLanguage =new  DropDownList();

            ddlFeedLanguage = (DropDownList)sender;
            for (int i = 0; i < ddlFeedLanguage.Items.Count; i++)
            {
                ListItem objListItem = new ListItem();
                objListItem = ddlFeedLanguage.Items[i];
                System.Globalization.CultureInfo objCultureInfo = new System.Globalization.CultureInfo(objListItem.Text);
                objListItem.Text = objCultureInfo.DisplayName;
            }
        }

så här är en fungerande och testad kod

jo du skall fortfarande ha med

                ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().Keys;
                ddlFeedLanguage.DataBind();

annars har du inte bundigt data vid kontrollen. Du måste även ha med OnDataBound i Html koden

<asp:DropDownList ID="ddlFeedLanguage" OnDataBound="ddlFeedLanguage_DataBound" runat="Server"></asp:DropDownList>
johaseoMedlem sedan maj 2009250 inlägg
#16

Det där lät ju intressant ... ni är inte på jakt efter en mycket erfaren dotnetnuke tredjepartsleverantör?

MickeA.comMedlem sedan feb. 20034 441 inlägg
#17

Det där fungerar kanon, men jag vill ju använda min Teleriklista och när jag kör med den får jag:

Unable+to+cast+object+of+type+'Telerik.Web.UI.RadComboBox'+to+type+'System.Web.UI.WebControls.DropDownList'

Tanken med det hela är att jag senare även ska lägga till resp. flagga som ikon före texten.

Såhär:
http://demos.telerik.com/aspnet-ajax/combobox/examples/functionality/textwithicons/defaultcs.aspx

MickeA.comMedlem sedan feb. 20034 441 inlägg
#18

Såhär lägger man till en rad i listan:

RadComboBox1.Items.Insert(0, new RadComboBoxItem(TextBox1.Text));

Så jag måste få in det i loopen på något sätt.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#19

Yes! Om man försöker lite själv så är det inte så svårt.

protected void ddlFeedLanguage_DataBound(object sender, System.EventArgs e)
{
	RadComboBox ddlFeedLanguage =new  RadComboBox();
	ddlFeedLanguage = (RadComboBox)sender;
	for (int i = 0; i < ddlFeedLanguage.Items.Count; i++)
	{
		RadComboBoxItem objListItem = new RadComboBoxItem();
		objListItem = ddlFeedLanguage.Items[i];
		System.Globalization.CultureInfo objCultureInfo = new System.Globalization.CultureInfo(objListItem.Text);
		objListItem.Text = objCultureInfo.DisplayName;
		objListItem.ImageUrl = "/images/loadingico.gif";
	}
}
MickeA.comMedlem sedan feb. 20034 441 inlägg
#20

johaseo skrev:

Det där lät ju intressant ... ni är inte på jakt efter en mycket erfaren dotnetnuke tredjepartsleverantör?

Lite stressad nu, drar ett PM under morgondagen!

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)