maandag 19 januari 2009

Fiedelientje

Mijn vrouw is pas geleden een webwinkel begonnen onder de naam Fiedelientje.

Fiedelientje is een kinderlifestyle webwinkel voor kleine wereldburgertjes. Houdt u van lieflijk, kleurrijk, stippen en ruitjes en niet van een standaard assortiment dan bent u bij Fiedelientje aan het juiste adres. U vind hier artikelen van verschillende leveranciers, maar ook handgemaakte artikelen van eigen ontwerp.

Smallweb heeft hiervoor de webapplicatie ontwikkeld. Wil je ook een webwinkel beginnen, bel of mail ons dan en wij komen graag onze webwinkel demonstreren.

Ik zou zeggen: ga snel eens kijken !!!

maandag 24 november 2008

ASP.NET control voor FusionChart

Op de markt zijn talloze grafiek componenten aanwezig die in ASP.NET webapplicaties geïntegreerd kunnen worden. Persoonlijk zoek ik altijd naar freeware controls, omdat de vraag naar grafieken in een webapplicatie vaak niet van dergelijk belang is dat er (veel) geld voor neergeteld wordt.

Nu heb ik een oplossing gevonden welke gratis is, zeer dynamisch, flexibel... en het ziet er nog fraai uit ook. FusionCharts biedt een oplossing die op Flash (versie 8) gebaseerd is. Het grote voordeel van Flash is natuurlijk dat het cross-browser en cross-platform is. Het nadeel is dat het altijd op de computer van de gebruiker geïnstalleerd moet zijn om er gebruik van te kunnen maken.

Om het gebruik van deze functionaliteit te vereenvoudigen heb ik een ASP.NET (3.5) control ontwikkeld, welke de meest gebruikte functionaliteiten toepast. Het control maakt gebruik van Javascript om de Flash elementen op de pagina toe te voegen.
Een Visual Studio 2008 project kan hier gedownload worden. Dit project bevat het ASP.NET control en een testpagina.

Belangrijke eigenschappen van het control:

  • DataSource: het toekennen van data aan het Flash element geschiedt middels XML. Dit control biedt de mogelijkheid om een IEnumberable DataSource toe te kennen. Deze DataSource zal als XML in de pagina worden toegevoegd
  • DataMemberXAxis: DataMember uit de DataSource die op de X-as gebruikt moet worden
  • DataMemberYAxis: Lijst met één of meerdere DataMembers die op de Y-as gebruikt moet worden.
    Let op: indien er meer dan één DataMember wordt gebruikt, dan dient een correct ChartType toegekent te worden (alle ChartTypes die beginnen met 'MS' kunnen hiervoor worden gebruikt)
  • ChartType: type grafiek die gebruikt moet worden. Elk type maakt gebruik van een ander Flash bestand. Zie de FusionCharts folder in het VS2008 project

Succes ermee !

Bron(nen):
FusionCharts
FusionCharts Documentatie

ASP.NET control voor Google AJAX Search API

Google maakt het mogelijk om (redelijk) simpel hun zoekmachine functionaliteit te integreren in je eigen website. Hiervoor kan je gebruik maken van de Google AJAX Search API.

Deze API kan middels Javascript aangeroepen worden en biedt een AJAX zoekmachine in je eigen website. Om het gebruik van deze functionaliteit te vereenvoudigen heb ik een ASP.NET (3.5) control ontwikkeld, welke de meest gebruikte functionaliteiten van de API toepast.
Een Visual Studio 2008 project kan hier gedownload worden. Dit project bevat het ASP.NET control en een testpagina.

Belangrijke eigenschappen van het control:
  • GoogleApiKey: deze key kan hier worden opgevraagd
  • SearchDefinitions: dit is de lijst met de types Search die je kan integreren op je website. Zie de Google documentatie voor uitleg hiervan. Standaard is het type WebSearch al aanwezig (zie Constructor) in deze lijst.
  • MessageForNoResults: standaard wordt geen melding weergegeven indien Google geen zoekresultaten heeft. Middels deze eigenschap kan je toch een melding laten weergeven
  • NoDefaultCss: standaard voegt Google zelf HTML styles toe aan de Google elementen op je pagina. Wanneer je deze eigenschap op False zet wordt dit niet gedaan en kan je je eigen styles gebruiken (door je juiste class names in je stylesheet op te nemen).

Succes ermee!

Bron(nen):
Google AJAX Search API
Documentatie Google AJAX Search API

vrijdag 31 oktober 2008

Verbergen van Next / Previous controls in ASP.NET WizardControl

Vandaag had ik een probleem met het verbergen van de Next / Previous links/buttons van een ASP.NET WizardControl.

Hierbij liep ik tegen 2 problemen aan:
  1. Middels de standaard methode FindControl op het WizardControl object kan de betreffende LinkButton niet gevonden worden. Hiervoor het ik zelf een FindControl methode gemaakt, welke hieronder is bijgevoegd
  2. Het aanpassen van de eigenschap [LinkButton].Visible naar False blijkt niet te werken. Waarschijnlijk negeert het WizardControl deze eigenscap in de eigen Render methode. In plaats van de Visible eigenschap kan je de Style eigenschap gebruiken:
    [LinkButton].Style["display"] = "none";

De code behorende bij punt 1 (deze methode zoek recursief, binnen een container control, naar het control met het betreffence ID):

public static Control FindControl(string controlID, Control container) 
{
foreach (Control ctrl in container.Controls)
{
if (ctrl.ID != null && ctrl.ID.Equals(controlID))
return ctrl;
if (ctrl.HasControls())
{
Control c = FindControl(controlID, ctrl);
if (c != null) return c;
}
}
return null;
}

Een voorbeeld van het verbergen van de Next link op de eerste Wizard Step:

WebControl = FindControl("StartNextLinkButton", this.wizardControl1) as WebControl;
nextLink.Style["display"] = "none";

Bronnen: Microsoft MSDN

dinsdag 23 september 2008

Dynamic Data integreren in bestaande web applicatie

Één na de nieuwe features in Visual Studio 2008 SP1 is de Dynamic Data Web Application. Een heel handige feature die het mogelijk maakt om je databronnen middels een website te bekijken of te muteren.

Als je een nieuw project in Visual Studio 2008 aanmaakt bestaat de Dynamic Data Web Application uit één van de vele mogelijkheden die Visual Studio tegenwoordig biedt. Indien je deze keuze maakt wordt een complete web applicatie voor je gegenereerd en hoef je eigenlijk alleen maar een 'LINQ to SQL classes' diagram toe te voegen; de benodigde tabellen op het diagram te slepen en de gecreëerde DataContext toe te voegen aan de MetaModel instantie in global.asax.cs en je bent klaar.

Wat nu als je deze functionaliteit wilt integreren in een bestaande web applicatie?
Ik heb wat zitten vogelen met deze functionaliteit en heb deze zo aangepast dat het relatief eenvoudig is om te integreren in een bestaande web applicatie. Hiervoor moet je het volgende doen:
  1. Download dit zip bestand en importeer de folder uit de zip in je web applicatie. De zip bevat een 'LINQ to SQL classes' diagram welke als voorbeeld is toegevoegd. Deze kan gewoon verwijderd worden!
  2. Voeg de volgende references toe aan je project:
    System.Web.DynamicData
    System.Web.Routing
  3. Voeg een 'LINQ to SQL classes' diagram toe aan je project en sleep de benodigde tabellen op het diagram
  4. Registreer de DataContext, van bovenstaand diagram, middels de model.RegisterContext functie van de RegisterRoutes methode in de DynamicDataModule klasse
  5. Wijzig de DynamicDataApplicationName constante in de DynamicDataMaster klasse naar je eigen applicatienaam

    == Web.config aanpassingen ==
  6. Voeg in de sectie de volgende assemblies toe:
    <add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.ComponentModel.DataAnnotations, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.DynamicData, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  7. Voeg in de / sectie de volgende tag prefix toe:
    <add tagPrefix="asp" namespace="System.Web.DynamicData" assembly="System.Web.DynamicData, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  8. Activeer ASP.NET Routing
       IIS5/IIS6 : voeg de module toe aan de httpModules sectie:
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
       IIS7 - deel 1: voeg de module toe aan de / sectie:
    <remove name="UrlRoutingModule" />
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
       IIS7 - deel 2 : voeg de handler toe aan de / sectie:
    <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  9. Voeg de DynamicDataModule aan de modules sectie toe (wijzig [WebApplitionName] in de naam van je assembly):
    <add name="DynamicDataModule" type="DynamicDataModule, [WebApplitionName]"/>

Als je nu de pagina DynamicData\Default.aspx opstart zou de Dynamic Data feature moeten werken.

Succes ermee !!!

donderdag 4 september 2008

Google Chrome foutmelding "The application failed to initialize properly (0xc0000005)”

Ik heb net Google Chrome gedownload en geïnstalleerd. Helaas kreeg ik bij het opstarten meteen de volgende foutmelding: "The application failed to initialize properly (0xc0000005)”.

Er zijn twee mogelijke oplossingen voor dit probleem:
1. Pas de registry aan:
  • Start de registry editor door op Start \ Uitvoeren de klikken en regedit.exe gevolgd door ENTER in te toetsen.
  • Ga in de boomstructuur HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SysPlant.
    Indien deze sleutel niet aanwezig is, dient deze aangemaakt te worden.
  • Open de 'Start' waarde of voeg deze toe (type is DWORD)
  • Wijzig de waardegegevens van de 'Start' waarde naar 4 om drivers uit te schakelen
  • Herstart de computer
2. Start Google Chrome met het "--no-sandbox" argument.
  • Klik met de rechter muisknop op de Google Chrome snelkoppeling
  • Voeg de tekst "–no-sandbox" (zonder de aanhalingstekens) toe aan het Doel veld.
In mijn geval werkte oplossing 1 al en was oplossing 2 niet meer noodzakelijk.

Mijn ervaringen met Google Chrome zijn tot nu toe erg goed. Ik heb nog nooit een webbrowser gehad die zo snel opstartte en zo snel naar een website surfte.

dinsdag 1 juli 2008

Één ItemTemplate voor Item en AlternatingItem in ASP.NET ListView control

In het ListView control in ASP.NET 3.x is het mogelijk om een ItemTemplate én een AlternatingItemTemplate te definiëren. Veelal wordt dit gebruikt om alleen maar een andere Style of CssClass te gebruiken voor het alternating item, zodat een mooier (subjectief natuurlijk ;-)) grid wordt gecreëerd.

In plaats van twee (bijna) identieke item templates te creëren is er een eenvoudigere oplossing mogelijk:
*** ASPX ***
<ItemTemplate>
   <tr class="<%# GetListItemCssName(Container) %>">
      <td>...</td>
   <tr>
</ItemTemplate>


*** CS ***
.protected string GetListItemCssName(object container)
{
   if (container is ListViewDataItem)
   {
      if (((ListViewDataItem)container).DisplayIndex % 2 == 0)
         return "Item";
      else
         return "AlternatingItem";
   }
   return null;
}

Zoals je ziet maak ik maar één template aan, nl. het ItemTemplate. Daar waar de variatie tussen een item en alternating item toegepast moet worden (in dit geval de class attribuut van de tabel regel) roep ik een methode in mijn code-behind aan.
De methode in de code-behind bepaalt aan de hand van de DisplayIndex of het om een even of oneven regel gaat en geeft de juiste class name terug.