III 05 2010

Zapamatování pozice v divu při přenačtení stránky

= Remember a Div's Scroll Position

Je-li na stránce div s nastavenou vlastností stylu Overflow tak, aby byl obsah bloku div rolovatelný, nastává problém při přenačtení stránky vlivem události na stránce. Po tomto přenačtení se obsah bloku div vždy zobrazí na začátku.

V bloku Erica Pascarello jsem našel způsob, jak si div zapamatuje svojí pozici po její změně a při načtení stránky ji nastaví. Příklad zdrojového kódu ze stránek autora je níže.

<html>
  <head>
    <title>Fun Scroll</title>
    <style type="text/css">
      #divTest{width:150px;height:200px;overflow:auto}
    </style>
    <script type="text/javascript">
      window.onload = function(){
        var strCook = document.cookie;
        if(strCook.indexOf("!~")!=0){
          var intS = strCook.indexOf("!~");
          var intE = strCook.indexOf("~!");
          var strPos = strCook.substring(intS+2,intE);
          document.getElementById("divTest").scrollTop = strPos;
        }
      }
      function SetDivPosition(){
        var intY = document.getElementById("divTest").scrollTop;
        document.title = intY;
        document.cookie = "yPos=!~" + intY + "~!";
      }
    </script>
  </head>
  <body>
    <div id="divTest" onscroll="SetDivPosition()">
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      ERIC<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
    </div>
  </body>
</html>

Ohodnoť příspěvek jako první

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
II 14 2010

Visual Studio 2010 RC – Načtení projektu modelu z verze Beta 2

= Visual Studio 2010 RC – Load Modeling Project from Beta 2

Společnost Microsoft s nově vydanou verzí Visual Studia 2010 RC změnila strukturu projektového souboru projektu modelu. Aby bylo možné otevřít projekt z Beta 2 v RC, je nutné provést několik úprav:

  1. V projektovém souboru změnit <TeamArchitect>0.3.0.0</TeamArchitect> na <ArchitectureTools>1.0.0.0</ArchitectureTools>
  2. Dále v tomto souboru ještě změnit <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\TeamArchitect\Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets" /> na <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\ArchitectureTools\Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets" />
  3. A nakonec u všech souborů v projektu změnit hodnotu dslVersion=”0.3.0.0” na dslVersion=”1.0.0.0”

Po těchto úpravách je již možné projekt otevřít v novém Visual Studiu 2010 RC.

Podklady: http://blogs.microsoft.co.il/blogs/shair/archive/2010/02/11/visual-studio-2010-rc-unable-to-load-modeling-project-from-beta-2.aspx

Ohodnoť příspěvek jako první

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
X 19 2009

Programová změna souboru web.config

= programmatically change web.config

Dnes jsem narazil na nutnost programové změny položek v konfiguračním souboru web.config.

Příklad ukáži na změně v sekci customError. Ukázkový konfigurační soubor je:

   1:  <authenticationmode="Windows" />
   2:          <!--
   3:              The <customErrors> section enables configuration
   4:              of what to do if/when an unhandled error occurs
   5:              during the execution of a request. Specifically,
   6:              it enables developers to configure html error pages
   7:              to be displayed in place of a error stack trace. -->
   8:   
   9:          <customErrorsmode="RemoteOnly" 
  10:              defaultRedirect="GenericErrorPage.htm">
  11:              <errorstatusCode="403"redirect="NoAccess.htm" />
  12:              <errorstatusCode="404"redirect="FileNotFound.htm" />
  13:          </customErrors>
  14:   
  15:      </system.web>

Programově lze poté hodnoty této sekce změnit následujícím způsobem:

   1:  // nacteni sekce
   2:  Configuration configuration = 
   3:       WebConfigurationManager.OpenWebConfiguration("~");
   4:  CustomErrorsSection section = 
   5:       (CustomErrorsSection)configuration.GetSection("system.web/customErrors");
   6:   
   7:  // zmena hodnoty polozky sekce
   8:  section.DefaultRedirect = "SomePage.htm";
   9:   
  10:  //ulozeni konfigurace
  11:  configuration.Save();

Ohodnoť příspěvek jako první

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
VII 24 2009

Otevření souboru v přiřazené aplikace

= Open file in default application

Je-li potřeba otevřít soubor v aplikace, ke které je defaultně přiřazen, lze využít následující konstrukci:

   1: System.Diagnostics.Process.Start(@"C:\poznámky.docx");

kde parametr v závorce je cesta k otevíranému souboru.

Někdy je třeba blíže specifikovat nastavení spouštěné aplikace, např. když ji chceme pouštět maximalizovanou. Toho lze docílit následujícím způsobem:

   1: System.Diagnostics.ProcessStartInfo PSI = new System.Diagnostics.ProcessStartInfo();
   2:  
   3: PSI.FileName = @"C:\poznámky.docx";
   4: PSI.WindowStyle = System.Diagnostics.ProcessWindowStyle.Maximized;
   5:  
   6: System.Diagnostics.Process.Start(PSI);

kde vlastnost FileName je cesta k otevíranému souboru a vlastnost WindowStyle jsou parametry, s jakými má dojít ke spuštění defaultní aplikace.

Ohodnoť příspěvek jako první

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
VII 07 2009

Podmínka v projekci u SQL příkazu

= The Expression in SQL projection (T-SQL)

Někdy je potřeba v projekci SQL dotazu SELECT zapsat podmínku např. pro zobrazování předvolby u zahraničních telefonních čísel. Původně jsem hledal nějaký ekvivalent iff v T-SQL, aby příkaz vypadal nějak takto:

SELECT [FirstName], [LastName], 
iff([Country] = "Slovakia", '+421' + [Phone], [Phone]) FROM Customers

Server při dotazu vrátil chybu

Server: Msg 170, Level 15, State 1, Line 5
Line 2: Incorrect syntax near '='.

Takže tudy cesta nevedla.

Při hledání funkčního, ekvivalentního řešení jsem narazil na následující konstrukci CASE-WHEN-THEN

SELECT 
 [FirstName], [LastName],
 CASE
    WHEN [Country]='Slovakia' 
     THEN '+421 ' + [Phone]
     ELSE [Phone]
     END AS Phone
FROM 
 Customers

která přesně pokrývá moje požadavky. Navíc ji lze rozšířit o více podmínek např. takovýmto způsobem:

SELECT [FirstName], [LastName],
   CASE [Country]
    WHEN 'Germany' 
     THEN '+49 ' + [Phone]
    WHEN 'Mexico'
     THEN '+625' + Phone
    WHEN 'Slavakia'
     THEN '+421 ' + Phone
     ELSE Phone
     END AS Phone
FROM 
 Customers

Ohodnoť příspěvek jako první

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5