<?xml version="1.0" encoding="windows-1250"?><?xml-stylesheet href="/rss20.xsl" type="text/xsl"?><rss version="2.0">
  <channel>
    <title>Programování - A jedeme dál ...</title>
    <link>http://weblog.clovicek.net/</link>
    <description>Človíčkův Weblog aneb Michal Horák bloguje</description>
    <language>cs</language>  
    <generator>A jedeme dál ... 0.1</generator>

    <copyright>Michal Horák</copyright>
    <category>weblog</category>
    <docs>http://backend.userland.com/rss</docs>
    
	<item>
		<title>ASP.NET MVC 1.díl</title>
		<link>http://weblog.clovicek.net/prispevek-aspnet-mvc-1dil.html</link>
		<description>Tak jsem zase po dlouhé době začal zkoumat něco nového v dotnetu. A ejhle ono se mi to zalíbilo :-) Jde o ASP.NET MVC, což je vlastně alternativa k WebForms, s tím že má řadu výhod, ale i nějakou tu nevýhodu.
Hlavními výhodami je striktnější oddělení logiky od prezentace, výsledný výstup je přesně takový jaký chcete a není ničím ovlivněn, lépe se testuje a dělá nám hezké url adresy v adresním řádku.
Nevýhodou oproti webforms je, že si musíme více věcí dělat sami, tedy je to méně pohodlné, ale za to můžeme dostat lepí výsledek.
Základem ASP.NET MVC je návrhový vzor model view controller, který už je známý zhruba tři desítky let, ale v poslední době se znovu ocitá na výsluní díky Ruby on Rails. No a Microsoft nemůže být nikdy pozadu, tak se pustil do ASP.NET MVC. </description>
		<comments>http://weblog.clovicek.net/prispevek-aspnet-mvc-1dil.html#komentare</comments>
	</item>

	<item>
		<title>Problém s bindováním dat v aspx stránce</title>
		<link>http://weblog.clovicek.net/prispevek-problem-s-bindovanim-dat-v-aspx-strance.html</link>
		<description>Opět jsem řešil drobný problém, který ale umí potrápit. Potřeboval jsem do repeateru vložit HyperLink, kde se dynamicky generovala vlastnost NavigateUrl. Nejprve jsem zkoušel toto:

    
        
            
            Odstranit z Blacklistu
        
    

Což se projevilo tak, že se vše vyhodnotilo jako text a teď co s tím? No řešení je opravdu jednoduché stačí malá změna :-)


    
        
            
            Odstranit z Blacklistu
        
    
. </description>
		<comments>http://weblog.clovicek.net/prispevek-problem-s-bindovanim-dat-v-aspx-strance.html#komentare</comments>
	</item>

	<item>
		<title>Převedení řetězce na datum v C#</title>
		<link>http://weblog.clovicek.net/prispevek-prevedeni-retezce-na-datum-v-c.html</link>
		<description>Opět tu mám jednu drobnost, která mě dokázala chvíly potrápit. Šlo o převedení řetězce ve tvaru dd-MM-yyyy na DateTime. Řešení je následující:

DateTimeFormatInfo formatInfo = new DateTimeFormatInfo();
formatInfo.ShortDatePattern = "dd-MM-yyyy";
formatInfo.DateSeparator = ".";

DateTime date = Convert.ToDateTime("15.04.2008", formatInfo);

DateTimeFormatInfo je k nalezení v Namespace System.Globalization, tak na to nezapomeňte :-). </description>
		<comments>http://weblog.clovicek.net/prispevek-prevedeni-retezce-na-datum-v-c.html#komentare</comments>
	</item>

	<item>
		<title>Simple Captcha v ASP.NET</title>
		<link>http://weblog.clovicek.net/prispevek-simple-captcha-v-aspnet.html</link>
		<description>Pro školní projekt jsem dnes dělal nějakou jednoduchou verzi Antispamové kontroly Captcha. Udělal jsem to tak, že jsem si vygeneroval kód a alespoň trošku přeházeně a s různými fonty jej vložil do obrázku, kde ještě matu s barevnými obdelníkčky. Kód jsem uložil do Sessions, abych se k tomu následně dostal a mohl vše zkontrolovat.
Zdrojový kód: Captcha.aspx.cs

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace GUI
{
    public partial class Captcha : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.ContentType = "image/gif";
            int sirka = 180;
            int vyska = 80;
            string code = GenerateCode();
            Session["code"] = code;
            string[] fonts = new string[4];
            fonts[0] = "Verdana";
            fonts[1] = "Arial";
            fonts[2] = "Arial Black";
            fonts[3] = "Arial Black";

            Random rand = new Random();
            Bitmap image = new Bitmap(sirka, vyska);
            Graphics g = Graphics.FromImage(image);
            Pen pero = new Pen(Color.BurlyWood, 1);

            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.FillRectangle(Brushes.Black, 0, 0, sirka, vyska);
            for (int i = 0; i < 30; i++)
            {
                g.FillRectangle(Brushes.DarkRed, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
                g.FillRectangle(Brushes.DarkGreen, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
                g.FillRectangle(Brushes.Red, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
                g.FillRectangle(Brushes.Green, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
            }

            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
            for (int i = 0; i < 6; i++)
            {
                g.DrawString(code.Substring(i, 1), new Font(fonts[rand.Next(0, 3)], rand.Next(18, 26)), Brushes.White, new Point(i*30, rand.Next(5, 30)));
            }
            image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
            g.Dispose();
            image.Dispose();
        }

        private string GenerateCode() {
            string znaky = "abcdefghijklmnopqrstuvwxyz0123456789";
            string code = string.Empty;

            Random rand = new Random();
            for (int i = 0; i < 6; i++)
            {
                code += znaky.Substring(rand.Next(0, znaky.Length - 1), 1);
            }
            return code;
        }
    }
}

A ověření je již jednoduché stačí dát:

if (kontrolaTextBox.Text == Session["code"].ToString()){}           
. </description>
		<comments>http://weblog.clovicek.net/prispevek-simple-captcha-v-aspnet.html#komentare</comments>
	</item>

	<item>
		<title>Jak měnit Master Page z kódu Web Content Formu</title>
		<link>http://weblog.clovicek.net/prispevek-jak-menit-master-page-z-kodu-web-content-formu.html</link>
		<description>Chvilku jsem si s tímto problémem lámal hlavu, ale docvaklo mi to a tak se můžu podělit. Je to jednoduché. Pro příklad si uděláme Master Page webGui.master, kde bude menu, ve kterém budeme chtít dát vědět, na které stránce jsme.
Otevřeme si soubor webGui.master.cs a přidáme do něj panely s odkazem a ke každému panelu property:

public Panel prvniLink {
    get {
        return PrvniPanel;
    }
    set {
        PrvniPanel = value;
    }
}

V kódu stránky využívající danou Master Page pak těmto property můžeme nastavit CssClass:

((webGui)this.Master).prvniLink.CssClass = "select";

No a už jen stačí pomocí css označit, že je tento odkaz vybraný &hellip;. </description>
		<comments>http://weblog.clovicek.net/prispevek-jak-menit-master-page-z-kodu-web-content-formu.html#komentare</comments>
	</item>

	<item>
		<title>Visual Studio 2008 - Web Form a Master Page</title>
		<link>http://weblog.clovicek.net/prispevek-visual-studio-2008---web-form-a-master-page.html</link>
		<description>Nedávno mě potrápilo nové Visual Studio 2008, to když jsem si chtěl vytvořit web využívající Master Pages, udělal jsem si novou Master Page a založil nový Web Form a hledal jsem kde je to zaškrtávací políčko, kde bych řekl, že chci využít svoji vytvořenou Master Page a ono nikde. Nejdříve jsem si Web Form přepsal ručně, ale to se mi pokaždé dělat nechtělo a tak jsem hledal, no a trvalo to skoro hodinu, než jsem si uvědomil, že nesmím zakládat Web Form ale Web Content Form. Tak pokud máte stejný problém, nebo teprve budete mít, snad jsem pomohl :-). </description>
		<comments>http://weblog.clovicek.net/prispevek-visual-studio-2008---web-form-a-master-page.html#komentare</comments>
	</item>

	<item>
		<title>Pomalý TableLayoutPanel v .NET 2.0 - Řešení</title>
		<link>http://weblog.clovicek.net/prispevek-pomaly-tablelayoutpanel-v-net-20---reseni.html</link>
		<description>Nedávno jsem měl jeden takový malý, nebo možná větší, problémek a ten se podařilo dostatečně vyřešit :-)
Když jsem se snažil do tableLayoutPanelu naskládat spousty labelů, tak to strašně dlouho trvalo, problém byl v tom, že se po každém přidání labelu, celý tableLayoutPanel překreslil. Řešením je nastavit property Visible u tableLayoutPanelu na false a až se vše vyplní, tak vše zobrazit nastavením Visible na true. Jednoduché, primitivní, ale zabralo to spoustu času &hellip;. </description>
		<comments>http://weblog.clovicek.net/prispevek-pomaly-tablelayoutpanel-v-net-20---reseni.html#komentare</comments>
	</item>

	<item>
		<title>Pomalý TableLayoutPanel v .NET 2.0</title>
		<link>http://weblog.clovicek.net/prispevek-pomaly-tablelayoutpanel-v-net-20.html</link>
		<description>Již nějakou dobu řeším jeden problém, mám tak dvě stovky informací, které chci přehledně a dynamicky vložit na formulář, každá položka jako jeden label a dataGridView lze špatně formátovat, takže jsem vyzkoušel TableLayoutPanel. Vše v něm vypadá parádně, ale má to velký háček. Než se všechny labely do TableLayoutPanelu vloží, tak to zabere spoustu času a to nemám počítač, který by se s něčím takovým mohl trápit.
Jestliže někdo víte o čem mluvím a podařilo se vám to vyřešit, dejte prosím vědět. </description>
		<comments>http://weblog.clovicek.net/prispevek-pomaly-tablelayoutpanel-v-net-20.html#komentare</comments>
	</item>

	<item>
		<title>Čtení dat z Excelu pomocí .NET C#</title>
		<link>http://weblog.clovicek.net/prispevek-cteni-dat-z-excelu-pomoci-net-c.html</link>
		<description>Jestliže potřebujete číst data uložená v tabulkách Excelu, pak mám pro vás jednoduchý prográmek v jazyku C#, který toto umí. Samozřejmě, že si jej můžete libovolně upravit podle svých potřeb.

using System;
using System.Collections.Generic;
using System.Text;

/* 
 * Michal Horák http://weblog.clovicek.net 2007
 * 
 * Pro načtení a změnu excelovsakého souboru je
 * potřeba přidat do referencí com Microsoft
 * Excel Object Library, nejlépe tu nejvyšší verzi
 */
namespace readExcel2
{
    class Program
    {
        static void Main(string[] args)
        {
            // Cesta k souboru
            string Path = AppDomain.CurrentDomain.BaseDirectory
                + "List.xls";

            // Vytvoří Aplikační třídu pro práci se souborem
            Excel.ApplicationClass app = new Excel.ApplicationClass();

            /* Otevře soubor, co se týče těch atributů funkce
             * open, tak nemám ponětí co se tam má psát,
             * našel jsem to na netu
             */
 
            Excel.Workbook workBook
                = app.Workbooks.Open(Path, 0, true,
                                     5, "", "", true,
                                     Excel.XlPlatform.xlWindows,
                                     "\t", false, false, 0, true, 1, 0);
            
            // Pracujeme s prvním listem
            Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Sheets[1];
            
            
            int index = 0; //index radku
            int index2 = 2; //index sloupce

            object rIndex = 1; // zacneme na radku 1
            object cIndex = 1; //sloupci 1
            object ColFirst = 1; //sloupci 1
            
            try
            {
                //dokud je neco na radku rIndex a prvnim sloupci
                while (((Excel.Range)workSheet.Cells[rIndex, cIndex]).Value2 != null)
                {
                    rIndex = 1 + index; //pricti radek
                    // dokud je neco na radku rIndex a sloupci ColFirst
                    while (((Excel.Range)workSheet.Cells[rIndex, ColFirst]).Value2 != null)
                    {
                        string retez = ((Excel.Range)workSheet.Cells[rIndex, ColFirst]).Value2.ToString();
                        Console.Write("{0},\t", retez); //vypis políčko [rIndex,ColFirst]
                        ColFirst = index2; //pricti sloupec
                        index2++;
                    }
                    Console.WriteLine();
                    if (index == 0)
                    {
                        Console.WriteLine("-----------------------------------------------");
                    }

                    ColFirst = 1; //nastav sloupec na zacatek
                    index2 = 2;    
                    index++;
                }
            }
            catch (Exception e)
            {
                app.Quit();
                Console.WriteLine(e.Message);
            }
            Console.ReadLine();
        }
    }
}
. </description>
		<comments>http://weblog.clovicek.net/prispevek-cteni-dat-z-excelu-pomoci-net-c.html#komentare</comments>
	</item>

	<item>
		<title>Visual C# 2008 Express Edition</title>
		<link>http://weblog.clovicek.net/prispevek-visual-c-2008-express-edition.html</link>
		<description>Pro vývojáře, kteří nechtějí platit za licence, vystačí si s omezenou verzí vývojového nástroje pro C# a chtějí využívat nejmodernější Microsoftí technologie, vyšel Visual C# 2008 Express Edition. 
Stahovat můžete na adrese http://www.microsoft.com/express/vcsharp/.
Pokud si chcete vyzkoušet kompletní Visual Studio 2008, pak lze stáhnout jeho 90-ti denní trial verze.. </description>
		<comments>http://weblog.clovicek.net/prispevek-visual-c-2008-express-edition.html#komentare</comments>
	</item>
</channel>
</rss>	
