Formlar arası veri taşıma

Web uygulamarın da sayfalar arasında veri taşınıldığı  gibi  masaüstü uygulamalarında da formlar arası veri taşına bilmekte. Örneğin kullanıcı sistemi ile çalışan masaüstü programında, kullanıcı girişi yapıldıktan sonraki kısımlarda  giriş yapan kullanıcı bilgisini(id, kullanıcı adı vs.) formlar arasında geçiş yaptırabiliyoruz. Veya en basit bir formda yapılan işlem sonucu başka bir formda yazdırabiliriz. Örnekler çok…

formlar-arasi-veri-transferi

Formlar arası veri transferini sağlamak için, web uygulamalarında olduğu gibi projeye c# için .cs uzantılı CodeFile boş kod dosyası ekleyip içerisine alttaki gibi bir sınıf ve değişken tanımlayın.

C#

1
2
3
4
static class globalsinifim
{
public static string kullanici = null;
}

Bu tanımladığımız sınıf ve değişkeni kullanabilmek için projemiz içinde herhangi bir form da aşağıdaki gibi kullanabiliriz.

1
globalsinifim.kullanici = textBox1.Text; 

Bu şekildeki bir örnekte formda textbox daki değeri global değişkenimize atadık. Taşıyacağımız diğer Form2 formunda global değişkene atadığımız değeri kullanabilmek, örneğin label da gösterebilmek için yapılması gereken;

1
label1.Text = globalsinifim.kullanici; 

şeklinde istediğimiz formda kullanabiliriz.

Visual Basic

Vb.net tarafında benzer şekilde .vb uzantılı boş CodeFile dosyası oluşturup değişken tanımlayın. Visual Basic tarafındaki tek fark oluşturduğunuz dosya adında modul oluşturmak. C# tarafında oluşturulan dosya ismi önemsizdi. Çünkü içindeki sınıf üzerinden değişken tanımlanmaktaydı.

Vb tarafında durum biraz farklı, oluşturulan boş kod ismi ile module ismi aynı olması gerekir. Projeye CodeFile.vb dosyası ekleyip ismini globalsinifim olarak değiştirin. Alttaki kodları girin.

Module globalsinifim

Public kullanici As String = Nothing

End Module

<code>Module globalsinifim</code>

Public kullanici As String = Nothing

End Module

Herhangi bir form da global değişkenimizi aşağıdaki gibi kullanabiliriz.

globalsinifim.kullanici = textBox1.Text

Başka bir formda veriyi gösterebilmek için kullanımı;

label1.Text = globalsinifim.kullanici 

şeklinde istediğimiz formda kullanabiliriz.

En büyük sayıyı bulma

Başlık size biraz programlama dünyasına göre klişe bir örnek gelmiş olabilir. Genelde bu şekilde internet de aratma yaptığınızda gelen sonuçlar konsol ekranında girilen 3 sayıdan büyüğünü bulma gibi örnekler karşımıza çıkmıştır. Tabi arada farklı olanları saymazsak.

Böyle basit makaleyi nereden yazdım derseniz anlatayım; veri kayıt etmek için xml e ihtiyaç duydum.(bu aralar xml ile yatıp kalkıyorum) Girilen kayıtların haliyle benzersiz id numarası olması gerekirdi. Bunun içinde doğal olarak girilen her kayıta 1 er arttırmalı id numarası verdim. Bunun için kontroller yardımı ile daha önceden xml içine kaydedilmiş id leri alıp üzerine +1 ekleyerek gerçekleştirdim. Size sorayım, database deki gibi kaydedilmiş veriyi xml dosyamıza kaydettiğimiz veriyi silip başka veri eklediğimizde bu şekildeki senaryoda kaç tane id varsa o sayının 1 fazlası ekleneceği için daha önce kayıt edilmiş id numaraları kayıt eklenecekti.

Örneği yorumlarsak 10 adet kayıt eklendiğini var sayalım. 11. kayıt id si 10+1 yani 11 id no olarak kayıt edilecek. 7 numaralı id kayıtı sildiğimiz de 11. kayıt, xml dosyamızın içinde toplamda 9 kayıt olduğu için id si 9+1 yani 10 olarak kayıt edilecek. Xml dosyamıza dönüp baktığımızda iki tane 10 numaralı id kayıtı olacak. Ee nerde kaldı bunun benzersiz kayıtı ? İşte böyle bir senaryoda basit bir yöntem işimizi halledebilecek.

Xml dosyasına kaydedilen verilerin yalnızca id numaralarını alarak içlerinden en büyüğünü alıp +1 ekleyerek yeni kayıt oluşturabiliriz. Konuyu uzattığım özür dileyerek en büyük sayıyı bulma işine yarayan koda geçmek istiyorum.

Xml den alınan verileri combobox içine ekleyip içindeki verileri döndürerek Array.Sort ile en büyük sayıyı belirleyebiliriz. Xml dosya okuma kısmını konu karışmaması için atlamak istiyorum (Xml dosya okuma burada ki makale yardımı ile xml veriyi combobox içine yazdırabilirsiniz)

1
2
3
4
5
6
7
8
9
10
11
12
13
 int[] sayilar = new int[comboBox1.Items.Count];

for (int i = 0; i < comboBox1.Items.Count; i++)
{
string eklenen = comboBox1.Items[i].ToString();

sayilar[i] = int.Parse(eklenen);

}

Array.Sort(sayilar);
int enbuyuksayi = sayilar[sayilar.Length - 1];
MessageBox.Show(enbuyuksayi.ToString());

Xml dosya okuma

Bir önceki yazıda Xml dosya oluşturma veri eklemeyi uygulamıştık. Bu yazıda oluşturduğumuz ve veri eklediğimiz xml dosyasındaki verileri nasıl okuruz görelim. Xml dosya okuma işlemini 3 ayrı; textbox, combobox ve listview kontrollerin de göstererek konunun öğrenilmesi için daha verimli hale getirdim.

Uygulama çalıştığında resimdeki gibi veriler kontrollerimizde gözükecek. Form üzerinde çalışma yaptığım uygulamada ilk olarak textbox lara veriyi nasıl çekebiliriz görelim. Aşağıdaki resimdeki gibi xml dosyamızın yapısı incelemenizde fayda olacak.

Daha önceden oluşturduğumuz xmldosyam.xml isimli dosyasmızın içindeki Kullanici3 daki veriyi textboxlarımızda gösterelim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 XmlDocument doc = new XmlDocument();

            doc.Load("c:\\klasorum\\xmldosyam.xml");
            XmlElement root = doc.DocumentElement;
            XmlNodeList kayitlar = root.SelectNodes("/Rapor/kullanicilar");


            foreach (XmlNode secilen in kayitlar)
            {
                string sirasi = secilen.Attributes[0].InnerXml;

                if (sirasi == "kullanici3")
                {

                    textBox1.Text = secilen["adi"].InnerText;
                    textBox2.Text = secilen["soyadi"].InnerText;
                }
            }

Xml den combobox a dosyadaki bütün veriyi çekip gösterme;

1
2
3
4
5
6
7
8
9
10
11
 XmlDocument doc = new XmlDocument();

            doc.Load("c:\\klasorum\\xmldosyam.xml");
            XmlElement root = doc.DocumentElement;
            XmlNodeList kayitlar = root.SelectNodes("/Rapor/kullanicilar");

            foreach (XmlNode secilen in kayitlar)
            {

                comboBox1.Items.Add(secilen["adi"].InnerText);
            }

Xml dosyasındaki verileri listview de gösterme;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
XmlDocument doc = new XmlDocument();

            doc.Load("c:\\klasorum\\xmldosyam.xml");
            XmlElement root = doc.DocumentElement;
            XmlNodeList kayitlar = root.SelectNodes("/Rapor/kullanicilar");

            foreach (XmlNode secilen in kayitlar)
            {
               
                    ListViewItem lv = new ListViewItem();
                    lv.Text = secilen["adi"].InnerText;
                    lv.SubItems.Add(secilen["soyadi"].InnerText);
                   
                    listView1.Items.Add(lv);
            }

Xml dosya oluşturma ve veri ekleme

Projelerimizde bazen küçük verileri bir yerde saklamak istemişizdir. Bu durumlarda yardıma koşan en basit text dosyası veriyi görüntüleme, sorgulama bakımından yetersiz olmaktadır. Bu gibi durumlarda yardımımıza xml gelmektedir. Xml genel olarak veri saklama ve farklı sistemler arasında geçişi sağlayan W3C tarafından tanımlanmış standarttır.

Basit bir örnek ile xml c3 projelerimizde nasıl kullanırız görelim. Bunun yanında bilgisayardaki herhangi bir dizine klasör nasıl oluşturulur bu örnek içinde de bulabilirsiniz. Resimdeki gibi form tasarlayarak örneği daha iyi anlayabilirsiniz.

Formu tasarladıktan sonra ilk önce c# da klasör nasıl oluşturulur Klasör oluştur buton clik olayına çift tıklayarak alttaki kodları harfiyen girelim.

1
2
3
4
5
6
7
8
9
10
11
12
13
 private void btnklasor_Click(object sender, EventArgs e)
        {

            bool klasorvarmi = Directory.Exists("c:\\klasorum");
            if (klasorvarmi == false)
            {

                Directory.CreateDirectory("c:\\klasorum");

                MessageBox.Show("Klasorum isimli dosya oluşturuldu !");

            }
        }

Burada yapılan işlem, bool değişken tip sayesinde klasörün var olup olmadığını sorguladık. Klasör yoksa Directory.CreateDirectory dizine klasör ekledik. Bunu yapmamın sebebi Windows 7 de direk C: dizinine xml gibi dosyaları oluşturma izin vermemesi. Xml dosyamızı bu klasörü oluşturmadan direk dizinde oluşturmaya kalktığımızda hata verecekti.

Gelelim oluşturduğumuz klasöre xml dosyamızı oluşturmaya. Bunun içinde xml oluştur buton clik olayına da alttaki kodları girelim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void btnolustur_Click(object sender, EventArgs e)
        {
            if (!File.Exists("c:\\klasorum\\xmldosyam.xml"))
            {
                XmlTextWriter xmlolustur = new XmlTextWriter("c:\\klasorum\\xmldosyam.xml", null);

                xmlolustur.WriteStartDocument();

                xmlolustur.WriteComment("oluşturulan xml hakkında bilgi");

                xmlolustur.WriteStartElement("baslangic");

                xmlolustur.WriteEndDocument();
                xmlolustur.Close();
            }
            else
            {
                MessageBox.Show("Oluşturulmadı");
            }
        }

Buradan daha önceden oluştuduğumuz klasör içine xml uzantılı dosyamızı oluşturduk. Son olarak oluşturulan xml dosya içeriğine veri girmek. Bunun içinde 2 textbox ve buton yardımı ile parametreleri göndererek işlemi bitirebiliriz.

Yapı daha önce denemeyenler için biraz karışık gelmiş olabilir. Ekle butonuna alttaki kodları yazıp uyguladığınızda oluşturduğunuz xml dosyasını inceleyerek karmaşayı çözebilirsiniz.

Bu örnek ile xml nasıl oluşturulur, xml nasıl veri eklenir gibi sorularınızın cevabını vereceğini düşünüyorum.

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
 private void btnekle_Click(object sender, EventArgs e)
        {
            if (File.Exists("c:\\klasorum\\xmldosyam.xml"))
            {
                XmlDocument doc = new XmlDocument();
                doc.Load("c:\\klasorum\\xmldosyam.xml");


                    XmlElement UserElement = doc.CreateElement("kullanicilar");

                    UserElement.SetAttribute("baslik", "kullanici");

                    XmlElement kullanciadi = doc.CreateElement("adi");
                    kullanciadi.InnerText = textBox1.Text;
                    UserElement.AppendChild(kullanciadi);


                    XmlElement kullanicisoyadi = doc.CreateElement("soyadi");
                    kullanicisoyadi.InnerText = textBox2.Text;
                    UserElement.AppendChild(kullanicisoyadi);

                   
                    doc.DocumentElement.AppendChild(UserElement);

                    XmlTextWriter xmleekle = new XmlTextWriter("c:\\klasorum\\xmldosyam.xml", null);
                    xmleekle.Formatting = Formatting.Indented;
                    doc.WriteContentTo(xmleekle);
                    xmleekle.Close();
                }
        }

Php mysql Türkçe karakter sorunu

Php de Mysql veritabanı ile bağlantı kurulup database imiz Türkçe karakter uyumlu olduğu halde php sayfamızda gösterdiğimizde Türkçe karakter sorunu ile karşılaşmaktayız. Bu sorunu çözmek için php bağlantı bloguna mysql query eklememiz yeterli olacaktır.

Eklenecek query;

1
mysql_query("Set Names UTF8");

Php mysql bağlantısındaki Türkçe karakter çözümü kod için uygulanışı;

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$con = mysql_connect("localhost","kullaniciadi","sifre");
if (!$con){
    die("bağlanamıyor" .mysql_error());
}
$db_select =mysql_select_db("databaseadi",$con);
if(!$db_select)
{
    die("veritabanı hatası " .mysql_error());
}
mysql_query("Set Names UTF8");

?>

Bilinmesi gereken php kodları

Yazılım nankör bir meslektir vesselam.. Bu söz ile neden başladım söyleyeyim, bazen en iyi olduğumuz dilde uzun süre kullanmadığımız özgün kod parçasını unutabiliyoruz. Bu yüzden php ile proje geliştiren arkadaşlar için not babında bilinmesi gereken php kodları…

Alttaki metinsel fonksiyonlar ile gösterilecek metnin; kaç karakter sayısını, seçili kelimeyi değiştirme, gösterilecek yazının uzunluğu gibi fonksiyonlar bulunmakta.

1
2
3
4
5
6
7
8
<?php
$metin="kullanılan, gösterilen yazı";
echo strlen($metin)."<br/>";  //gösterilecek metnin kaç karakterli olduğunu gösterir

echo str_replace("yazı","cümle",$metin)."<br/>" ; //gösterilecek metindeki yazı geçen kelimeyi değiştirerek yerine cümle kelimesini yazdırmakta

echo substr($metin,0,10)."<br/>"  //gösterilecek yazının 0 dan 10. karaktere kadar olanını göstermekte
?>

Php switch case yapısı

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$sayi=2;

switch($sayi)
{
     case 0:
     echo "sayi değeri 0";
     break;
     case 1:
     echo "sayi değeri 1";
     break;
     case 2:
     echo "sayi değeri 2";
     break;
     default;
     echo "dışında bir değer";
}
 ?>

Php while döngüsü, döngüde 1 den 10 da dahil sayıyı ekrana yazdırmakta.

1
2
3
4
5
6
7
8
<?php
$sayac=1;
while($sayac <=10)
{
    echo $sayac." ";
    $sayac++;
}
?>

Programlamada en çok kullanılan diğer yapılardan bir tanesi projede tekrar ede kod blogunu bir kere yazıp istediğimiz yerde çalıştırılması. C# da bu işlemi metod lar ile yapabiliyoruz. Php de ise fonksiyonlarla yapılmakta.

Alttaki kodda coder isimli fonksiyonumuzu birden fazla yerde kullanmak için oluşturmuş olduk.

1
2
3
4
5
6
7
8
9
<?php
function coder()
{
    echo "Coder.digitaldunyam.net - Kod Blogu..."; 
}

coder();

?>

Fonksiyona parametre yani kullanıcıdan alınan bir değeri gönderip göstermek istiyorsak;

1
2
3
4
5
6
7
8
9
<?php
function parametreli($parametre)
{
    echo "Merhaba {$parametre} Coder.digitaldunyam.net - Kod Bloguna hoşgeldin...";   
}

parametreli("Murat");

?>

Bir sayfayı herhangi bir sayfaya yönlendirmek için

1
2
3
4
<?php

header ("Location: http://coder.digitaldunyam.net" );
?>

Nivo slider siteye ekleme

Bir önceki yazımda hazırladığım basit css ana sayfa üzerinden devam ediyorum. Yazıyı buradan görebilirsiniz. Önceki tasarıma göre yeni eklenen görseller; site logosu, basit menü ve konumu olan slider.

Başlamadan önce slider eklenmiş hazır tasarıma ve slider dosyalarını alttaki linkten indirebilirsiniz.

Like or Tweet this page to reveal the content.

Büyük resim olarak bıraktığım alana slider(otomatik değişen resimler, geçişli resimler) ekleyeceğiz. Bunun için öncelikle sayfamda kullandığım Nivo slider kodlarını nivo.dev7studios.com, dosyalarını(jquery, css) bilgisayarınıza indirmeniz gerekmekte.

İndirdiğiniz anasayfa tasarımının ekran görüntüsü

Dosyaları veya yukarıda paylaştığım bitmiş tasarımı indir diğinizi varsayarak başlamak istiyorum.

Nivo slider’in çalışması için gerekli dosyaları Head etiketi arasına css js dosyaların yerlerini belirterek yapıştırın. Kodlar içinde dikkat edilmesi gereken noktalar; css ve js ek olan dosyaların doğru yolunun verilmesi, jquery.nivo.slider.pack.js dosya ekinin hemen altına koddaki gibi sliderın çalışması için gerekli script dosyalarının hemen altında olması (javascript i başka yere yazıldığın da çalışmıyor! ).

Bir diğer dikkat edilmesi gereken husus, $(‘#buyukresim’).nivoSlider( daha önceki örnekte oluşturduğum #buyukresim id’li sınıfı javascript içinde belirtmem olması. Yukarıda paylaştığım bitmiş olan tasarımı indirip bakarsanız ne göstermek istediğimi daha iyi anlarsınız.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    <link href="slider/themes/default/default.css" rel="stylesheet" media="screen" type="text/css" />   <link href="slider/nivo-slider.css" rel="stylesheet" media="screen" type="text/css" />

    <link href="style.css" rel="stylesheet" media="screen" type="text/css" />

<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script><script type="text/javascript" src="slider/jquery.nivo.slider.pack.js"></script>
<script type="text/javascript">// <![CDATA[
   $(window).load(function() {
       $('#buyukresim').nivoSlider(
            {
            animSpeed: 500,
            }
            );
   });

// ]]></script>

Sliderın çalışması için gerekli dosyaları ekledikten sonra sıra geldi gösterilecek olan resimlere.

1
2
3
4
5
6
7
8
9
<div class="slider-wrapper theme-default">
<div class="nivoSlider" id="buyukresim">


<img alt="" src="resimler/resim2.jpg" width="960" height="360" />
<img alt="" src="resimler/resim3.jpg" width="960" height="360" />

</div>
</div>

Bir sonraki yazılarda bu ana sayfa tasarım uygulamasının devamında görüşmek üzere…