31 Ocak 2014 Cuma

C# MVC, Klasörde Bulunan Dosya adlarının DropDownList ile gösterimi

C#'ta klasör ve dosya işlemlerinde System.IO kütüphanesini kullanırız.
Örnek :

 Dosya Adlarının Çekilmesi :
 public List dosyalar(string path)
        {
//DirectoryInfo tipinden bir değişken oluşturup,
//içindeki dosyaları okumak istediğimiz klasörün dizin bilgisini veriyoruz.
            DirectoryInfo di = new DirectoryInfo(path);

//FileInfo tipinden bir değişken oluşturuyoruz.
//çünkü di.GetFiles methodu, bize FileInfo tipinden bir dizi dönüyor.
            FileInfo[] rgFiles = di.GetFiles();

//Dosya İsimlerinin kayıt edilecegi List oluşturuyoruz
            List dosya = new List();

//Foreach ile rgFiles içerisinde dönerek dosya adlarını listemize ekliyoruz
            foreach (FileInfo fi in rgFiles)
            {
//fi.Name bize dosyanın adını dönüyor.

//fi.FullName ise bize dosyasının dizin bilgisini döner.
                dosya.Add(fi.Name);
            }

//geriye liste olarak dosya isimlerinin bulunduğu string liste dönüyor
            return dosya;
        }

// Action içerisinden çağırma ve ViewBag ile ViewBag atama kodu:
       List resim = dosyalar(Server.MapPath("~/images").ToString());
               ViewBag.resimler = new SelectList(resim.AsEnumerable());


 //View İçeriği :
  @Html.DropDownList("Name",ViewBag.resimler as SelectList)

29 Ocak 2014 Çarşamba

C# Linq – Aggregate Metodu

Aggregate Metodu


Enumerable sınıfına ait olan ve IEnumerable interfacesini implement eden tüm tiplere uygulanabilen Aggregate metodunu açıklamak istiyorum.
Aggregate metodu aslında bazı işlemleri çok kolay yapılmasını sağlasa da ilk etapda tam olarak nasıl çalıştığını anlamak kafa karıştırıcı olabiliyor. Bu metod, aldığı listenin elemanları üzerinde tek tek işlem yaparak, bir önceki işlem sonucunu bir sonraki elemanın işleme sokulduğu noktaya taşır.
Bunu bir örnek ile anlatmak gerekirse,
List<string> str = new List<string> {"fatih", "mehm", "d", "dd","asdasdad", "45g", "çoookuzunbistring", "dahakısastring" };
string enUzunString = str.Aggregate((x, y) => x.Length > y.Length ? x : y);
 
Console.WriteLine(enUzunString);
 
//Output : çoookuzunbistring
Yukarıdaki örnek, Aggregate metodunu kullanarak, liste içindeki en uzun stringi bulan basit bir kod parçacığıdır.
Burda yapılan işlemi açıklamak gerekirse, Aggregate metodu, liste içinde ilk önce 1. elemanı yani “fatih” stringini ele alır. İlk eleman olduğundan “aggregated value” olarak bu ilk eleman atanır. Daha sonra metod ikinci elemana geçer. Aggregated Value da yapılan ikinci işlem için taşınır. Daha sonra “mehm” strinigini ele alır ve bunun uzunluğu ile taşınan aggregated value uzunluğu karşılaştırılarak sonuç bir sonraki eleman için aktarılır. Bu şekilde liste içindeki tüm elemanlar gezilir.
Sonuç olarak liste içindeki en uzun string bulunur ve enUzunString değişkenine atanır.
List<int> intList = new List<int> {456, 2, 56, 7, 5678, 12, 22, 3, 456789 };
int enBuyuk = intList.Aggregate((a, b) => a > b ? a : b);
 
Console.WriteLine(enBuyuk);
Yine aynı şekilde elemanlar liste içinde taşınan aggregated value ile tek tek karşılaştırılarak en büyük int bulunur.

Linq ile ilk 10 kaydın çekilmesi (Take)

.Take() Fonksiyonu bu amaçla kullanılmaktadır.

Örnek :
var q = from m in MyTable.Take(10)
        select m.Foo

21 Ocak 2014 Salı

WPF STYLE

WPF’te Style’ların farklı farklı kullanım yöntemleri vardır:
1.) Resource Dictionary oluşturup tasarıya eklemek:
Tasarı (proje) üzerinde sağ tıklayın, Add, Resource Dictionary, Bir isim girin (ben başına rd koymayı tercih ediyorum). Oluşturduğumuz kaynak dosyayı her User Control ya da Window’da kullanabilmemiz için App.xaml doyasına geçip aşağıdaki gibi bir tanımlama yapıyoruz:

       
           
               
                    rdNesneler.xaml"/>
               
           
       
   
Source özelliğine tanımladığımız rdNesneler.xaml kaynak dosyası istediğimiz her Window ve User Control’de kullanabileceğimiz Style’ları tutacak. Bu xaml’ın içinde oluşturduğumuz her Style dosyasını (Elbette x:key değeri olmak zorunda) her yerde kullanabiliriz.
2.) Window ya da UserControl içerisinde oluşturup kullanmak:
Resource Dictionary gibi bu yöntem de her yerde kullanıma açıktır. RD’den farkı yalnızca oluşturulduğu sınıf içerisinde çağırılabilmesidir. Örneğin aşağıdaki gibi bir Button Sitilimiz olsun:

< Style x:Key=”dugmeSitili” TargetType=”Button”>
< Setter Property=”Background” Value=”WhiteSmoke” />

< Setter Property=”Padding” Value=”8,4″ />
< Setter Property=”Margin” Value=”4″ />
< Setter Property=”FontFamily” Value=”Trebuchet MS”/>
< /Style>
< /Window.Resources>

< Button Style=”{StaticResource dugmeSitili}” Content=”Mehmet ” Margin=”61,182,227,52″ />
< Button Style=”{StaticResource dugmeSitili}” Content=”Mehmet ” Margin=”71,96,239,135″ />
< /Grid>
Görüldüğü gibi Sitil özelliklerimiz Application.Resource yerine Window.Resource altında tanımlandı. Bu yüzden yalnızca bu Window altında çalışacaktır. Diğer önemli bir noktaysa her iki düğme için de aynı Sitil tanımlamasının yapılmış olmasıdır. Eğer istersek bu penceredeki tüm düğmeler için tek bir kere tanımlama yaparak da Sitil belirleyelebiliriz. Aşağıdaki XAML’ı inceleyelim:






Kodlardan da anlaşılabileceği gibi Window.Resources altında bir kere tanımlanan Sitil, düğmelerde tek tek belirtilmeden uygulanmıştır. Bunun nedeni TargetType özelliğine Button değerinin atanmış olmasıdır. Aynı durum tüm diğer nesneler için de söz konusudur.

30 Ekim 2013 Çarşamba

Toad Oracle’da Türkçe Karakter Sorunu ve Çözümü


Toad dan Oracle veritabanına bağlanıp dataları çektiğimde verilerdeki Türkçe karakterlirin yerine ''?'' işareti çıkması.


Çözümü şu şekilde;
Regeditten NLS_LANG değerini bulup değerini TURKISH_TURKEY.TR8MSWIN1254 olarak değiştirmek.( Aynı değer birden fazla olabilir. Eğer oracle'ı tek bi seferde kurmadıysanız ve kaldırma yapamadan yeniden üzerinde kurmak istediğimizde her yeni Oracle ürünü kurulumu ile farklı bir ORACLE_HOME altında değerler oluşturur.Toad bunlardan birini kullanıyordur.Bunun için doğru NLS_LANG değerini değiştirdiğinizden emin olun.)


Bunları yaptıktan sonra hala düzelmemiş ise son çare olarak Control Panel\Clock,Language, and Region (Denetim Masası\Saat, Dil ve Bölge) giderek Region and Language (Bölge ve Dil ) kısmına gelerek burdaki Formats,Location,Keybord (Biçim,Yer,Klavye ) vs.. bütün ayarları Turkish (Turkey) olarak ayarlamanız gerekebilir.

26 Eylül 2013 Perşembe

ROW_NUMBER Kulanımı Örnek, Bir fatura bazında, fatura detaylarına sıra numarası verilmesi



select (mod(emp_id,5)-emp_id)*-1 page, seq_no,tutar FROM (
SELECT seq_no, tutar, ROW_NUMBER()
   OVER (PARTITION BY seq_no ORDER BY seq_no) AS emp_id
   FROM ser_hiz_det
   where seq_no in ('680501','81127')
   )
   ORDER BY seq_no


SELECT department_id, last_name, employee_id, ROW_NUMBER()
   OVER (PARTITION BY department_id ORDER BY employee_id) AS emp_id
   FROM employees;

DEPARTMENT_ID LAST_NAME                 EMPLOYEE_ID     EMP_ID
------------- ------------------------- ----------- ----------
           10 Whalen                            200          1
           20 Hartstein                         201          1
           20 Fay                               202          2
           30 Raphaely                          114          1
           30 Khoo                              115          2
           30 Baida                             116          3
           30 Tobias                            117          4
           30 Himuro                            118          5
           30 Colmenares                        119          6
           40 Mavris                            203          1
. . .
          100 Popp                              113          6
          110 Higgins                           205          1
          110 Gietz                             206          2

27 Temmuz 2013 Cumartesi

SQL - Pivot Table Nedir Nasıl Kullanılır

MS SQL Server;

Pivot table bir tablodaki verileri yatay olarak göstermemizi sağlar yani satırlarda bulunan bilgileri istediğimiz alanlara göre sutunlara çevirir.  Özellikle rapor hazırlarken verileri daha anlaşılır ve düzenli hale getirmemizi sağlar. Örneğin bir sipariş tablomuz var. Bir müşterinin verdiği her bir sipariş bir satırda gösteriliyor. Her müşteri için son 6 aylık sipariş bilgilerini görmek istiyoruz. Birinci yöntem her hareketi alt alta yazmak olabilir ama daha anlaşılır ve düzenli bir rapor için her müşteri bir satırda yer almalı ve bu satırda son altı aya ait tüm sipariş tutarlarının toplamı gösterilmelidir. Bu durumda pivot table kullanmak imdadımıza yetişir. Bu örneğin daha iyi anlaşılması için küçük bir çalışma yapalım.
İlk olarak basit bir tablo yapalım ve içine aşağıdaki örnek verileri atalım.
CREATE TABLE [dbo].[Siparis](
      [SiparisID] [int] IDENTITY(1,1) NOT NULL,
      [MusteriAdSoyad] [varchar](80) NULL,
      [UrunAdi] [varchar](50) NULL,
      [Tutar] [decimal](10, 2) NULL,
      [Donem] [int] NULL
) ON [PRIMARY]
SiparisIDMusteriAdSoyadUrunAdiTutarDonem
    Sabri KUNTApple IPAD1025201001
    Ali DEMİRLG Netbook950200912
    Metin TOSUNPacketBell Notbook1200200911
    Sabri KUNTNikon D50001480200912
    Sabri KUNTMicrosoft Mouse100200912
    Metin TOSUNHP Printer250200912
    Metin TOSUNHP Server2100200911
    Ali DEMİRHP Pavilion1600200912
   Ali DEMİRADSL Modem80200911
Şimdi müşteri başına aylık olarak ne kadar harcama yapıldığını görmek için bir sorgu yazalım.
SELECT
       MusteriAdSoyad
      ,Donem
      ,sum(Tutar) as ToplamTutar    
  FROM Siparis
  group by MusteriAdSoyad ,Donem
Yukarıdaki sorgu sonucu aşağıdaki gibi her donem için müşterilerin kaç liralık harcama yaptıklarını görürüz.

MusteriAdSoyadDonemToplamTutar
Ali DEMİR20091180
Metin TOSUN2009113300
Ali DEMİR2009122550
Metin TOSUN200912250
Sabri KUNT2009121580
Sabri KUNT2010011025
Peki, bizim binlerce müşterimiz olsa ve toplam 1 yıl boyunca her ay ne kadarlık harcamala yaptıklarını görmek istersek yukarıdaki gibi bir sorgunun sonucunda içinden çıkamayacağımız büyük bir tablomuz olurdu. Her müşteri için aylık harcama miktarlarını farklı satırlarda göstermek hiç de işimize gelmezdi.
Şimdi ise her müşteriyi tek bir satırda gösterelim ve sipariş verdikleri her ay içinde bir kolon açarak bunun altında toplam sipariş tutarlarını gösterelim. Pivot table için Siparis tablosunu gruplayarak kullanmamız gerekiyor. Çünkü sipariş tablosunda her ay için müşteri bazında birden fazla harcama var. Yukarıda yaptığımız gruplamayı yeni bir tablo olarak alıp bunu pivot yaparsak istediğimiz sonuca ulaşabiliriz.
SELECT *
FROM (
      SELECT
       MusteriAdSoyad
      ,Donem
      ,sum(Tutar) as ToplamTutar 
      FROM Siparis
      group by MusteriAdSoyad ,Donem
     ) as gTablo
PIVOT
(
  SUM(ToplamTutar)
  FOR Donem IN ([200911],[200912],[201001])
)
AS p
Yukarıdaki sorgu sonucu aşağıdaki gibi her ay bir kolon olacak şeklide bilgilerimiz yatayda dizildi
MusteriAdSoyad200911200912
Ali DEMİR802550
Metin TOSUN3300250
Sabri KUNTNULL1580

Gördüğünüz gibi bu şeklide bir tablo oluşturmak sonucun daha düzenli olmasını sağladığı gibi incelenmesini kolaylaştırır.

ORACLE;

SELECT ...
FROM   ...
PIVOT [XML]
   ( pivot_clause
     pivot_for_clause
     pivot_in_clause )
WHERE  ...

SQL> WITH pivot_data AS (
            SELECT deptno, job, sal
            FROM   emp
            )
    SELECT *
    FROM   pivot_data
    PIVOT (
               SUM(sal)        --<-- pivot_clause="" span="">
           FOR deptno          --<-- pivot_for_clause="" span="">
          IN  (10,20,30,40)   --<-- pivot_in_clause="" span="">
         );

JOB               10         20         30         40
--------- ---------- ---------- ---------- ----------
CLERK           1430       2090       1045
SALESMAN                              6160
PRESIDENT       5500
MANAGER         2695     3272.5       3135
ANALYST                    6600