Recent comments

None


İçerik Ara











Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2013
Takvim
<<  Aralık 2017  >>
PaSaÇaPeCuCuPa
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
Keywords

Ne şaşalı bir başlık oldu değil mi:)

Sql server amcamız gene yapacağını yaptı. Bir müşterimizde ortaya çıkan probleme göre eğer tablo TURKISH_CI_AS collation una sahipse sıralama işlemi sırasında sql server – yi dikkate almamakta:)

Bir örnekle ne demek istediğimizi anlatalım.

use tempdb;

create table deneme(skod varchar(15),sname varchar(50)) 
insert deneme values
('00232','aaaa'),
('0-0232','bbbb'),
('00233','cccc'),
('00234','dddd')

 select * from deneme order by skod

 /* sonuç bu şekilde geliyor..
 skod	sname
00232	aaaa
0-0232	bbbb
00233	cccc
00234	dddd

oysaki bu şekilde gelmeli.
 skod	sname
0-0232	bbbb
00232	aaaa
00233	cccc
00234	dddd

*/

select * from deneme where skod>='00232' and skod<='00234'

/*sonuç bu şekilde geliyor
 skod	sname
00232	aaaa
0-0232	bbbb
00233	cccc
00234	dddd

oysaki bu şekilde gelmeli
skod	sname
00232	aaaa
00233	cccc
00234	dddd
*/

drop table deneme
go

Aslında bu sadece TURKISH_CI_AS collation unun problemi değil. Bütün windows collation larında bu problem mevcut. Bu arada SQL deyimiyle başlamayan collation lar windows collation diye geçiyor.

Problemin support adreside şu şekilde. http://support.microsoft.com/kb/305704

Çözüm yolu olarak 2 yol sunabiliriz.

Bunlardan ilki tire yerine 5 yada sizin belirleyeceğiniz sayıda 0 ı replace edip sıralama ve wherlemede bu kolonu kullanabilirsiniz. Ben pek sıcak bakmadım ama siz isterseniz kullanırsınız:)

replace(skod,'-','00000')

Diğer çözüm yolu ise TURKISH_CI_AS yerine SQL_Latin1_General_CP1254_CI_AS collation ını kullanmak. Yaptığım araştırmalarda bu 2 collation Unicode karakterler bakımından tamamen aynı. ANSI karakterler bakımından ise göz ardı edilebilir bazı farklar içermekte. Bana bu yöntem daha sıcak geldi açıkçası.

Bu arada SQL server 2008 de bulunan tüm TURKISH collation lara ve özelliklerine şu şekilde erişmeniz mümkün.

-- SQL Server 2008 Turkish collations
select * from sys.fn_HelpCollations()
where description like ('%Turkish%')
/*
name	description
Turkish_BIN	Turkish, binary sort
Turkish_BIN2	Turkish, binary code point comparison sort
Turkish_CI_AI	Turkish, case-insensitive, accent-insensitive, kanatype-insensitive, width-insensitive
Turkish_CI_AI_WS	Turkish, case-insensitive, accent-insensitive, kanatype-insensitive, width-sensitive
Turkish_CI_AI_KS	Turkish, case-insensitive, accent-insensitive, kanatype-sensitive, width-insensitive
Turkish_CI_AI_KS_WS	Turkish, case-insensitive, accent-insensitive, kanatype-sensitive, width-sensitive
Turkish_CI_AS	Turkish, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive
Turkish_CI_AS_WS	Turkish, case-insensitive, accent-sensitive, kanatype-insensitive, width-sensitive
Turkish_CI_AS_KS	Turkish, case-insensitive, accent-sensitive, kanatype-sensitive, width-insensitive
Turkish_CI_AS_KS_WS	Turkish, case-insensitive, accent-sensitive, kanatype-sensitive, width-sensitive
Turkish_CS_AI	Turkish, case-sensitive, accent-insensitive, kanatype-insensitive, width-insensitive
Turkish_CS_AI_WS	Turkish, case-sensitive, accent-insensitive, kanatype-insensitive, width-sensitive
Turkish_CS_AI_KS	Turkish, case-sensitive, accent-insensitive, kanatype-sensitive, width-insensitive
Turkish_CS_AI_KS_WS	Turkish, case-sensitive, accent-insensitive, kanatype-sensitive, width-sensitive
Turkish_CS_AS	Turkish, case-sensitive, accent-sensitive, kanatype-insensitive, width-insensitive
Turkish_CS_AS_WS	Turkish, case-sensitive, accent-sensitive, kanatype-insensitive, width-sensitive
Turkish_CS_AS_KS	Turkish, case-sensitive, accent-sensitive, kanatype-sensitive, width-insensitive
Turkish_CS_AS_KS_WS	Turkish, case-sensitive, accent-sensitive, kanatype-sensitive, width-sensitive
Turkish_100_BIN	Turkish-100, binary sort
Turkish_100_BIN2	Turkish-100, binary code point comparison sort
Turkish_100_CI_AI	Turkish-100, case-insensitive, accent-insensitive, kanatype-insensitive, width-insensitive
Turkish_100_CI_AI_WS	Turkish-100, case-insensitive, accent-insensitive, kanatype-insensitive, width-sensitive
Turkish_100_CI_AI_KS	Turkish-100, case-insensitive, accent-insensitive, kanatype-sensitive, width-insensitive
Turkish_100_CI_AI_KS_WS	Turkish-100, case-insensitive, accent-insensitive, kanatype-sensitive, width-sensitive
Turkish_100_CI_AS	Turkish-100, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive
Turkish_100_CI_AS_WS	Turkish-100, case-insensitive, accent-sensitive, kanatype-insensitive, width-sensitive
Turkish_100_CI_AS_KS	Turkish-100, case-insensitive, accent-sensitive, kanatype-sensitive, width-insensitive
Turkish_100_CI_AS_KS_WS	Turkish-100, case-insensitive, accent-sensitive, kanatype-sensitive, width-sensitive
Turkish_100_CS_AI	Turkish-100, case-sensitive, accent-insensitive, kanatype-insensitive, width-insensitive
Turkish_100_CS_AI_WS	Turkish-100, case-sensitive, accent-insensitive, kanatype-insensitive, width-sensitive
Turkish_100_CS_AI_KS	Turkish-100, case-sensitive, accent-insensitive, kanatype-sensitive, width-insensitive
Turkish_100_CS_AI_KS_WS	Turkish-100, case-sensitive, accent-insensitive, kanatype-sensitive, width-sensitive
Turkish_100_CS_AS	Turkish-100, case-sensitive, accent-sensitive, kanatype-insensitive, width-insensitive
Turkish_100_CS_AS_WS	Turkish-100, case-sensitive, accent-sensitive, kanatype-insensitive, width-sensitive
Turkish_100_CS_AS_KS	Turkish-100, case-sensitive, accent-sensitive, kanatype-sensitive, width-insensitive
Turkish_100_CS_AS_KS_WS	Turkish-100, case-sensitive, accent-sensitive, kanatype-sensitive, width-sensitive
SQL_Latin1_General_CP1254_CI_AS	Turkish, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive for Unicode Data, SQL Server Sort Order 130 on Code Page 1254 for non-Unicode Data
SQL_Latin1_General_CP1254_CS_AS	Turkish, case-sensitive, accent-sensitive, kanatype-insensitive, width-insensitive for Unicode Data, SQL Server Sort Order 129 on Code Page 1254 for non-Unicode Data
*/

Kolay gelsin

Turgay sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar,

Araba marka ve modellerini tuttuğumuz bir tablo olduğunu varsayalım. Birde fiyat bilgimiz olsun. Yapmak istediğimiz her markanın en pahalı 2 modelini getirmek. Diğerlerini istemiyoruz.

Bunu getirecek sql aşağıda ki gibidir. (Sql Server 2005 ve 2008 için)

SET NOCOUNT ON
 
-- Table ı create edelim
DECLARE @Tablom table
   (  KayitID       int   IDENTITY, 
      Marka         varchar(50),
      Model         varchar(50),
      Fiyat         decimal(10,2)
   )
 
-- Kayıtları ekleyelim
 
INSERT INTO @Tablom VALUES ( 'Mercedes', 'SLK', 220000 )
INSERT INTO @Tablom VALUES ( 'Mercedes', 'E200', 120000 )
INSERT INTO @Tablom VALUES ( 'Mercedes', 'S500', 320000 )
INSERT INTO @Tablom VALUES ( 'Mercedes', 'C200', 100000 )
INSERT INTO @Tablom VALUES ( 'BMW', '7.50', 440000 )
INSERT INTO @Tablom VALUES ( 'BMW', '3.25', 110000 )
INSERT INTO @Tablom VALUES ( 'BMW', '3.20', 80000 )
INSERT INTO @Tablom VALUES ( 'BMW', '5.25', 240000 )
INSERT INTO @Tablom VALUES ( 'Opel', 'Corsa', 60000 )
INSERT INTO @Tablom VALUES ( 'Opel', 'Vectra', 80000 )

-- Sorgu cümlemiz
SELECT
   KayitID,
   Marka,
   Model,   
   Fiyat
FROM (SELECT
         ROW_NUMBER() OVER ( PARTITION BY Marka ORDER BY Fiyat DESC ) AS 'KayitSirasi',
         KayitID,
         Marka,
         Model,
         Fiyat
      FROM @Tablom
      ) t
WHERE KayitSirasi <= 2

Umarım işinize yarar.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar,

Bu yazımızda JQuery de ki efekt fonksiyonlarını göreceğiz.

show() – Saklı olan bir nesne veya nesneleri görünür yapmaya yarar. Mesela loaderGif id li img i show etmek için $(“#loaderGif”).show();

show( speed, [callback] )  - Show işlemini istediğimiz hızda yapmamızı yarar. Speed değeri olarak slow,normal yada fast değeri alabilir. Yada milisaniye cinsinden de değer vermek mümkündür. Mesela sayfada ki paragrafları hızlı biçimde show yapalım. $("p").show("slow");

hide() – Görünür olan bir nesne veya nesneleri saklamaya yarar. Mesela loaderGif id li img i hide etmek için $(“#loaderGif”).hide();

hide( speed, [callback] )  - Hide işlemini istediğimiz hızda yapmamızı yarar. Speed değeri olarak slow,normal yada fast değeri alabilir. Yada milisaniye cinsinden de değer vermek mümkündür. Mesela sayfada ki paragrafları hızlı biçimde hide yapalım. $("p").hide("slow");

toggle() – Saklı olan bir nesneyi göstermeye, görünür olan bir nesneyi saklamaya yarar. Misal bir butona basıldığında loaderGif saklansın, tekrar basıldığında görünür hale gelsin.

    $("#button1").click(function () {
      $("#loaderGif").toggle();
    });

toggle( switch ) – Switch değeri true ise elemanlar hide olur, false ise elemanlar show olur.

toggle( speed, [callback] )  - Toggle işlemini hide veya show da ki gibi belli bir hızla yapmaya yarar. Gene hız değeri olarak slow,normal yada fast değeri alabilir. Örneğin loaderGif i yavaş bir biçimde toggle layalım. $(“loaderGif”).toggle(“slow”);

slideDown( speed, [callback] ) – Verilen hızda istenen nesneleri aşağıya doğru açılarak göstermeye yarar. Örneğin $("#loaderGif").slideDown("slow");

slideUp( speed, [callback] ) – Verilen hızda istenen nesneleri yukarıya doğru kapanarak saklamaya yarar. Örneğin $("#loaderGif").slideUp("slow");

slideToggle( speed, [callback] ) – Verilen hızda nesneyi slide olarak toggle yapmaya yarar. Toggle ile çalışma mantığı aynı şekildedir. Örneğin $("#loaderGif").slideToggle("slow");

fadeIn( speed, [callback] ) – Verilen hızda istenen nesneleri opacity lerini arttırarak göstermeye yarar. Örneğin $("#loaderGif").fadeIn("slow");

fadeOut( speed, [callback] ) – Verilen hızda istenen nesneleri opacity lerini azaltarak saklamaya yarar. Örneğin $("#loaderGif").fadeOut("slow");

fadeTo( speed, opacity, [callback] )  - Verilen hızda istenen nesnelerinin opacity lerini verilen değer yapar. Örneğin $("#loaderGif").fadeTo("slow",0.33);

jQuery.fx.off – Bütün animasyonları disable etmeye yarar. disable etmek için jQuery.fx.off = true;, tekrar enabled etmek için jQuery.fx.off = false;

 

Jquery de Efekt fonksiyonları bu şekilde.

Daha fazla bilgi için JQuery Effects sayfasını inceleyebilirsiniz.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar

Bu yazımda SQL Server da SQL Function ları anlatacağım.

Buyrun vakit kaybetmeden başlayalım:)

Function Açıklama Kullanım Sonuç
ASCII Verilen karakterin ascii karşılığını verir. ASCII(‘D’) 68
CHAR Verilen ascii kodun char karşılığını verir. CHAR(68) D
CHARINDEX Verilen ilk string in ikinci string de ki başlama posizyonunu verir. Bulamazsa 0 döndürür. CHARINDEX('turgay', 'Naber turgay sahtiyan') 7
LEFT Verilen string in baştan verilen karakter kadar olan kısmını döndürür. LEFT('turgay',2) tu
LEN Verilen string in uzunluğunu verir. LEN('turgay') 6
LOWER Verilen string i küçük harflere döndürür. LOWER('TuRGaY') turgay
LTRIM Verilen string in solunda ki boşlukları siler. LTRIM('  turgay') turgay
REPLACE String değiştirmek için kullanılır. REPLACE('turgay','rg','aa')

tuaaay

REPLICATE Verilen string i verdiğiniz sayı kadar yanyana yazar. REPLICATE('1',3) 111
REVERSE Verilen string i ters çevirir. REVERSE('turgay') yagrut
RIGHT Verilen string in sondan verilen karakter kadar olan kısmını döndürür. RIGHT('turgay',2) ay
RTRIM Verilen string in sağında ki boşlukları siler. LTRIM('turgay  ') turgay
SPACE Verilen sayı kadar boşluk karakteri döndürür. 'turgay'+ space(2)+ 'sahtiyan' turgay  sahtiyan
STR Verilen double sayıyı string e dönüştürmeye yarar. 3 parametresi vardır.1.double sayı,2.string in toplam uzunluğu,3.decimal kısmın uzunluğu STR(123.45, 6, 1) 123.5
STUFF 2. parametre de verilen sayı kadar kısmı 1.string den siler ve onun yerine 2.string i ekler. STUFF('turgay', 2, 3, 'sahtiyan')

tsahtiyanay

SUBSTRING Verilen string den belli bir kısmı almaya yarar. SUBSTRING('turgay', 2, 3) urg
UPPER Verilen string i büyük harflere döndürür. UPPER('TuRGaY') TURGAY

Sormak istediğiniz bir şey olursa yorum kısmında sorabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar,

Bu yazımda SQL Server da Trigger konusunu anlatacağım.

Trigger kelime manasıyla tetikleyici manasına gelir. Herhangi bir table da yapılan insert-update-delete işlemlerinde istediğimiz bir sql kodu trigger vasıtasıyla tetikleriz.

Mesela bir fatura girildiği zaman genel toplamı cari hesaba kaydetmek için, yada bir stok kartı yada cari kart silindiği zaman bunu kimin sildiğini loglamak için trigger kullanabiliriz.

Örnek uygulamamızda pubs kataloğunda ki jobs table ından bir job silindiğinden başka bir table a silinen bu job un id sini ve silinme tarihi yazacağız.

Bunun için bir delete trigger ı yazacağız.

Ondan önce silinen kayıtları tutmak için pubs kataloğuna aşağıda ki table ı create ediyoruz.

trigger1

Daha sonra trigger ı yazıyoruz.

--Job_Delete_Trigger trigger ın adı. İstediğimiz başka bir ad da kullanabiliriz.
--trigger var mı diye kontrol ediyoruz..varsa drop ediyoruz..
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Job_Delete_Trigger]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[Job_Delete_Trigger]
GO
--Jobs table ına Job_Delete_Trigger adlı trigger ı create et
CREATE TRIGGER Job_Delete_Trigger ON dbo.Jobs
--trigger ı encrypt etmeye yarar. Başkaları göremez. 
--Bu kodu stored procedure ve function larda da kullanabilirsiniz
With Encryption
--Trigger delete esnasında çalışsın
FOR  DELETE 
AS
  --deleted tan bilgileri alıp job_delete table ına yaz
  insert Job_Delete
    select job_id,GetDate()
    from Deleted
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

Insert ve Update için trigger yazmak istiyorsak FOR DELETE kısmı yerine FOR INSERT veya FOR UPDATE kullanmalısınız.

Sormak istediğinzi bir şey olursa yorum kısmında sorabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar

Bu yazımda gridView da sorting nasıl yapılacağını göstereceğim.

İlk önce sort yapmak istediğimiz kolonların SortExpression özelliklerine neye göre sort etmek istediğimizi belirtiyoruz.

aspx dosyasından;

<asp:BoundField DataField="code" HeaderText="Kodu" SortExpression="code"/>
<asp:BoundField DataField="name" HeaderText="Adı" SortExpression="name"/>

koddan;

BoundField bf = new BoundField();
bf.DataField = "CariKod";
bf.HeaderText = "Cari Kodu";
bf.SortExpression = "CariKod";
GridView1.Columns.Add(bf);

Daha sonra gridView in event leri altında ki sorting e çşift tıklayarak sorting esnasında ki kodumuzu yazıyoruz.

    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sortType = "";
        if (GridViewSortDirection == SortDirection.Ascending)
        {
            GridViewSortDirection = SortDirection.Descending;
            sortType = " DESC";
        }
        else
        {
            GridViewSortDirection = SortDirection.Ascending;
            sortType = " ASC";
        }   

        DataTable dataTable = GridView1.DataSource as DataTable;
        if (dataTable != null)
        {
            DataView dataView = new DataView(dataTable);
            dataView.Sort = e.SortExpression + " " + sortType;

            GridView1.DataSource = dataView;
            GridView1.DataBind();
        }
    }

Önceki sıralama tipini set ve get ettiğimiz fonksiyon olan GridViewSortDirection ın kodu ise;

    public SortDirection GridViewSortDirection
    {
        get
        {
            if (ViewState["sortDirection"] == null)
                ViewState["sortDirection"] = SortDirection.Ascending;
            return (SortDirection)ViewState["sortDirection"];
        }
        set { ViewState["sortDirection"] = value; }
    }

Sormak istediğiniz bir şey olursa yorum kısmından sorabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar,

Bu yazımda ASP.NET in kendi komponentleri ile form doğrulama (validation) işlemlerinin nasıl gerçekleştirildiğini anlatacağım.

Form lar vasıtasıyla kullanıcılar bilgi almak istediğimizde form submit esnasında bazı alanları kontrol etmek isteriz. Mesela ad-soy ad girişmiş mi,şifre1 ve şifre 2 birbirinin aynı mı , e mail adresi formata uygun girilmiş mi vs.

Bunları post ettikten sonra kontrol etmemiz mümkün. Ama biz post etmeden sayfa tekrar yüklenmeden kontrol etmek istiyoruz.

Bunun içinde ToolBox ta ki validation komponentleri kullanacağız.

valid1

Komponentlerin kullanım yerleri;

RequiredFieldValidator Bir form elemanının boş olup olmadığını kontrol edebiliriz.
RangeValidator Bir form elemanının değerini kontrol edebiliriz. Mesela girilen yaş 18-99 aralığında mı gibi.
RegularExpressionValidator Bir form elemanının formatını kontrol edebiliriz. Mesela girilen e-mail adresi formata uygun mu gibi.
CompareValidator 2 form elemanını karşılıştırıp aynı olup olmadıklarını kontrol edebiliriz. Mesela şifre1 ve şifre2 birbirinin aynı mı gibi.
CustomValidator Kendimize özel bir validate formatı yazabiliriz.
ValidationSummary Validate işleminden sonra hata var ise bunu komponent in yanında değil de altta bir özet olarak göstermek için kullanılır. 2. örneğimizde göreceğiz.

Evet işlemlerimize başlayalım.

Önce bir form tasarlıyoruz. Formun içine ad-soyad-email-yaş-şifre1 ve şifre 2 alanları koyalım.

valid2

Şimdi validator ları koyalım.

  • Ad ve soyadın doluluğunu kontrol etmek için RequiredFieldValidator
  • email in formatını kontrol etmek için RegularExpressionValidator
  • Şifre1 ve 2 nin birbirine aynı olup olmadığını kontrol etmek için CompareValidator
  • Girilen yaşı kontrol etmek için RangeValidator kullanacağız.

Koyduğumuz validator lere validate başarısız olursa vereceği hata mesajını ErrorMessage kısmından yazıyoruz.

Şimdi her validator için set ettiğimiz özellikleri yazalım.

RequiredFieldValidator

  • Errormessage giriyoruz.
  • ControlToValidate kısmından hangi kontrolu validate edeceğini seçiyoruz.

RegularExpressionValidator

  • Errormessage giriyoruz.
  • ControlToValidate kısmından hangi kontrolu validate edeceğini seçiyoruz.
  • Validationexpression kısmına e mail kontrolü yapacağımız için şu formatı yazıyoruz. "\w+\w*\@\w+\w+\w*\.(com|edu|org|gov|com.tr|org.tr|net|net.tr)"

RangeValidator

  • Errormessage giriyoruz.
  • ControlToValidate kısmından hangi kontrolu validate edeceğini seçiyoruz.
  • minimumValue kısmına 19,maximumValue kısmınada 99 yazıyoruz.
  • type seçeneğini integer seçiyoruz.

CompareValidator

  • Errormessage giriyoruz.
  • ControlToValidate kısmına txtSifre1, ControlToCompare kısmına da txtSifre2 yi seçiyoruz.

Ayarlarımız bu kadar. Şu anda sayfamızı çalıştırdığımızda istediğimiz sonucu alacağız. Çalışan örneğe buradan erişebilirsiniz.

Şimdi ikinci örneğemize geçelim. Bu örneğimiz de ValidationSummary kullanacağız. Aynı zamanda bu örneğimize de aynı sayfaya koyduğumuz için ValidationGroup u inceleyeceğiz.

ValidationGroup, hangi butona basıldığında hangi validationların işleme alınacağını belirtmek için kullanılır. Örneğimizde ilk form için bütün validationGroup ları 1,ikinci formumuz için 2 yapacağız. Bu şekilde her form kendi içinde çalışmış olacak.

Şimdi ilk formumuzu kopyalayıp aşağıya yapıştıralım.input name leri ve controlToValidate leri ayarlayalım. Aynı zamanda validationGroup ları set edelim.

Daha sonra butonların altında bir ValidationSummary koyalım. Hata mesajlarının validate lerde değilde validationGroup ta çıkması için validate lerin display özelliklerini none yapalım.

Ayarlarımız bu kadar. Şu anda sayfamızı çalıştırdığımızda istediğimiz sonucu alacağız. Çalışan örneğe buradan erişebilirsiniz.

ASP.Net te Validation işlemlerimiz bu şekilde. Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Örneklerin tamamına buradan erişebilirsiniz.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar

Kullandığımız gridview lerde miktarsal kolonların en altında toplamlarının olmasını isteyebiliriz. Aşağıda ki örnekte ki gibi;

sum1

Bununla alakalı internet te örnek ararken aşağıda ki kodu buldum. Kaynak göstermeden kullanmak olmaz:)

http://www.dotnetspider.com/resources/5228-Sum-In-Gridview-Footer.aspx

protected void dgSummary_RowDataBound(object sender, GridViewRowEventArgs e)
        {           
            try
            {
             if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    ColumnTotal += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "Amount"));                                                         
                }
                else if (e.Row.RowType == DataControlRowType.Footer)
                {
                    e.Row.Cells[6].Text = "Total Rs:";
                    // for the Footer, display the running totals
                    e.Row.Cells[8].Text = ColumnTotal.ToString();
                    e.Row.Cells[8].HorizontalAlign = HorizontalAlign.Right;               
                    e.Row.Font.Bold = true;
                }                
            }
            catch (Exception ex)
            {        
            }
        }

Tabi biz bu kodda baya bir değişiklik yapacağız..:)

İlk olarak ekleyeceğimiz birden fazla kolon için alt toplam yazdırmak.

Ayrıca yazdıracığımız kolonları bir list te tutarak döngüyle erişeceğiz.

Birde format ekledik mi tamamdır.:)

Kod aşağıda ki gibidir. Açıklamaları kodun içinde vermeye çalıştım. Sormak istediğiniz bir şey olursa yorum kısmında sorabilirsiniz.

public partial class YoneticiRapor : System.Web.UI.Page
{
    //kolon toplamlarını bu listede tutacağız.
    List<double> Toplamlar = new List<double>();
    //hangi kolonların toplamını almak istiyorsak bu listeye indexlerini yazıyoruz.
    List<int> Toplanacaklar = new List<int>();

    protected void Page_Load(object sender, EventArgs e)
    {
	     //toplamak istediğimiz kolonların indexlerini atıyoruz.
                Toplanacaklar.Add(2);
                Toplanacaklar.Add(3);
                Toplanacaklar.Add(4);

	      //bu toplamları sıfırlıyoruz
                 for (int i = 0; i <= Toplanacaklar.Count-1; i++)
                       Toplamlar.Add(0);
    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        try
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int i=0;
                foreach (int top in Toplanacaklar)
                {
                    //her toplanacak için toplama yapıyoruz.
                    Toplamlar[i] += Convert.ToDouble(((DataRowView)e.Row.DataItem).Row.ItemArray[top].ToString());
                    i++;
                }
            }
            else if (e.Row.RowType == DataControlRowType.Footer)
            {
                int i=0;
                foreach (int top in Toplanacaklar)
                {
                    //footer a yazıyoruz.
                    e.Row.Cells[top].Text = Toplamlar[i].ToString("N2");
                    e.Row.Cells[top].HorizontalAlign = HorizontalAlign.Right;
                    i++;
                }
                e.Row.Font.Bold = true;
            }
        }
        catch (Exception ex)
        {
        }
    }

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


turgay , 25. Haziran 2009, 16:44

Merhaba arkadaşlar

Bu yazımda JQuery de ki olayları yani event ları anlatacağım.

ready(fn)

İlk göreceğimiz event ready event i. Bunu hemen hemen her jqeury işleminde görmeniz mümkün. Bir DOM element load edildiğe anda gerçekleşir. Mesela sayfamız da bir image olsun ve biz sayfa yüklendiğinde bu image i hide edelim.

$(document).ready(function() {
        $("#loaderGif").hide();
});

Bunun gibi event bind işlemlerinide ready nin altında yapabilirsiniz. Mesela sayfada ki tbFiyat diye biten bütün textbox ların focus event ine alert koyalım.

$(document).ready(function() {
        $("form input:text[id$=tbFiyat]").focus(function() {
            alert("aaa");
        });
});

bind( type, [data], fn )

Bir DOM elemana bir event i bind etmeye yarar. Mesela sayfada ki paragraflara tıklandığında alert vermesi için

$("p").bind('click', function(e){
	alert("aaa");
});

unbind( [type], [fn] )

bind işleminin tersini yapar. Mesela paragraflara bind ettiğimiz click event ini unbind edelim

$("p").unbind('click');

one( type, [data], fn )

Bir DOM elemana event bind etmeye yarar. bind dan farkı bir kere çalışır. Mesela sayfada ki paragralara tıklandığında alert verelim ama bu tıklama sadece bir kere yapılabilsin.

$("p").one("click", function(e){
	alert("aaa");
});

trigger( event, [data] )

İstenilen DOM elemanın istenilen event ini tetiklemeye yarar. Mesela buton 1 e click event i atıyalım. buton 2 nin click event in de de buton1 in click event ini tetikleyelim.

$("#button1").click(( function(){
	alert("aaa");
});

$("#button2").click(( function(){
	$("#button1").trigger('click');
});

hover( over, out )

Bir DOM elemanın üstüne gelindiğinde ve mouse üzerinden gittiğinde çalışacak fonksiyonları set etmeye yarar. Örneğin tüm table td leri için şöyle bir hover olayı yazabiliriz.

$("td").hover(
  function () {
    $(this).addClass("hover");
  },
  function () {
    $(this).removeClass("hover");
  }
);

toggle( fn, fn2, [fn3,fn4,...] )

Bir DOM elemanına her tıklamada hangi fonksiyonun çalışmasını istiyorsak set edebiliriz. Fonksiyonlar her tıklamada sırasıyla çalışır. Bitince en başa döner.

Bu toggle ı kaldırmak için unbind(‘click’) metodunu kullanabiliriz.

Mesela bir paragrafa tıklandığında sırasıyla çalışacak toggle fonksiyonları için

    $("li").toggle(
      function () {
        $(this).css({"list-style-type":"disc", "color":"blue"});
      },
      function () {
        $(this).css({"list-style-type":"disc", "color":"red"});
      },
      function () {
        $(this).css({"list-style-type":"", "color":""});
      }
    );

blur

Bir eleman focus özelliğini kaybettiğinde blur özelliği çalışır. Bunu tetiklemek için mesela $(“#button1”).blur() şeklinde kullanabiliriz. Set etmek için ise

    $("input").blur(function () {
         $(this).next("span").css('display','inline').fadeOut(1000);
    });

Aşağıdaki diğer event lerin kullanım şekli blur gibidir. O yüzden sadece ne zaman tetiklendiklerini yazmakla yetineceğim.

blur Eleman focus özelliğinde kaybettiğinde çalışır.
change Eleman focus özelliğini kaybettiğinde ve içeriği değiştiği zaman çalışır.
click Eleman tıklandığında çalışır.
dblclick Eleman çift tıklandığında çalışır.
error Eleman hata verdiğinde çalışır.
focus Eleman focus olduğunda çalışır.
keydown Bir tuşa basıldığı zaman çalışır.
keypress Bir tuşa basılı tutulduğu sürece çalışır.
keyup Bir tuştan parmak çekilince çalışır.
load Eleman yüklendiğinde çalışır.
mousedown Elemanın üstündeyken mouse basıldığı zaman çalışır.
mouseup mouse un basılma tuşu bırakıldığı zaman çalışır.
mouseenter mouse elemanın üzerine geldiğinde çalışır.
mouseleave mouse elemanın üzerinden gittiğinde çalışır. Elemanın içinde ki elemana geçiş yapıldığında çalışmaz.
mousemove mouse elemanın üzerinde gezinirken çalışır.
mouseout mouse elemanın üzerinden gittiğinde çalışır. Elemanın içinde ki elemana geçiş yapıldığında çalışır.
mouseover mouse elemanın üzerine geldiğinde çalışır.
resize Elemanın eni veya boyu değiştirildiğinde yani resize edilidğinde çalışır.
scroll Eleman scroll edildiğinde çalışır.
select Eleman seçildiğinde çalışır. Mesela bir textbox ın içinde ki bir kısım veri mouse ile seçildiğinde çalışır.
submit Eleman submit edildiğinde çalışır
unload Eleman unload ediliğinde çalışır.


JQuery de Events yani olaylar bu şekilde.

Daha fazla bilgi almak JQuery Events sayfasını inceleyebilirsiniz.

Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar

Bu yazımda basit bir web service yazıp bu servise AJAX ile nasıl erişileceğini anlatacağım.

DortIslem adında bir web service imiz olsun. Bu servisimizde topla diye bir fonksiyonumuz olsun ve verdiğimiz 2 rakamı toplayıp sonucu döndürsün.

Kodları yazmadan evvel dikkat etmemiz gereken bir kaç konu var. 1. si web servis dosyamızda ki

[System.Web.Script.Services.ScriptService]

satırını command halden çıkarmamız gerekiyor. Çünkü biz bu metodumuza AJAX yoluyla erişeceğiz.

Diğer bir konuda web servis dosyamızda namespace kullanımı. Bu şekilde daha düzenli bir kod yapısı oluşmakta.

Bir diğer önemli nokta AJAX ile çaıracağımız web servis internal olmalı. Yani aynı domain de bulunmalı. Eğer external bir çağırım yapmak istiyorsak internal yazacağımız web service external dan bilgiyi toplamalı ve biz AJAX ile bu internal web service den bilgiyi almalıyız.

Kodlarımız aşağıdaki gibi. Açıklamalar kodların içinde yazılı.

DortIslem.asmx

<%@ WebService Language="C#" Class="myMath.DortIslem" %>

DortIslem.cs

using System;
using System.Web;
using System.Web.Services;
using System.Xml;
using System.Web.Services.Protocols;
using System.Web.Script.Services;

namespace myMath
{
    /// <summary>
    /// Summary description for DortIslem
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // bu web servise ajax ile ulaşmak istiyorsak aşağıdaki comment i açmamız gerekmekte
    [System.Web.Script.Services.ScriptService]
    public class DortIslem : System.Web.Services.WebService
    {
        [WebMethod]
        //ajax ile erişeceğimiz fonksiyon
        public string Topla(int sayi1,int sayi2)
        {
            int toplam;
            toplam = sayi1 + sayi2;
            return toplam.ToString();
        }
    }

}

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <script type="text/javascript">
        //butona bastığımız da çağrılan fonksiyon
        //bu fonksiyon web service e bağlanıp istenen fonksiyonu çağırmakta.
        function butonClick() {
            var sayi1 = document.getElementById("tbSayi1");
            var sayi2 = document.getElementById("tbSayi2");
            myMath.DortIslem.Topla(sayi1.value, sayi2.value
                , onComplete
                );                
        }

        //web service de ki fonksiyon problemsiz tamamlanınca çağrılan fonksiyon
        //bu fonksiyonla dönen değeri sonuç a yazıyoruz.
        function onComplete(result) {
            var sonuc = document.getElementById("sonuc");
            sonuc.innerHTML = result;
        }

    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>  
        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference Path="DortIslem.asmx" />
            </Services>
        </asp:ScriptManager>  
        <asp:Label ID="sayi1" runat="server" Text="1.Sayı"></asp:Label>
        <asp:TextBox ID="tbSayi1" runat="server"></asp:TextBox>
        <br />
        <br />
        <asp:Label ID="sayi2" runat="server" Text="2.Sayı"></asp:Label>
        <asp:TextBox ID="tbSayi2" runat="server"></asp:TextBox>
        <br />
        <br />
        <input id="Button1" type="button" value="Topla" OnClick="butonClick();"/>
        <br />
        <br />
        <asp:Label ID="Label3" runat="server" Text="Sonuç:"></asp:Label>
        <span id="sonuc"></span>    
    </div>
    </form>
</body>
</html>

Sormak istediğiniz bir şey olursa yorum kısmında sorabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar

Bu makalemde Visual Studio 2008 ile beraber gelen ajax kontrollerini kullanmayı anlatacağım.

Basit bir uygulama ile hiç bir javascript kodu yazmadan ajax kullanmayı göreceğiz.

Örneğimiz şu şekilde olsun. Sayfamızda bir tarih nesnesi olsun ve tarih nesnesinde tarih seçtiğimizde seçilen tarihi ajax ile updatepanel kullanarak label a yazsın. Ajax ile yazıp yazmadığınıda pageload da anlık saati yazdığımız diğer bir label ile kontrol edelim.

Sayfamızın görüntüsü şu şekilde.

ajax1

Şimdi kodlarımıza bakalım.

Defaul.aspx dosyası

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>

<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="postback yap" />
<br />
<br />
</div>
<hr />
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Calendar ID="Calendar1" runat="server"
onselectionchanged="Calendar1_SelectionChanged"></asp:Calendar>
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>

 

default.aspx.cs dosyası

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//page load esnasında label 2 ye şu an ki saati atıyoruz.
Label2.Text = DateTime.Now.ToLongTimeString();
}
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
//calendar da tarih seçtiğimiz de bunu label 1 e atıyoruz
Label1.Text = Calendar1.SelectedDate.ToShortDateString();
}
}

Örneğimizi inceleyecek olursak sayfa postback olmasına rağmen label2 nin içeriğinin değişmediğini göreceksiniz. Bunu sağlayanda updatepanel dir. Sayfa postback olmasına rağmen sadece updatepanel in içeriği güncellenmektedir.

Bu arada ek bir bilgi vermek istiyorum. Ajax kontrollerini kullanabilmek için sayfamızda scriptmanager olmak zorunda.

ScriptManager ve UpdatePanel kontrollerine ToolBox ta Ajac Extensions kısmından erişebilirsiniz.

Sormak istediğiniz bir şey olursa yorum kısmında sorabilirsiniz.

Kolay Gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar,

Select işlemlerinde Deadlock hatalarını ortadan kaldırmak için WITH(NOLOCK) kullanılabilir. Yalnız böyle bir durumda dirty read yani tam olarak düzgün kayıt alınmaması mümkündür.

Kullanımı şu şekildedir.

Select * from Tablo_adi WITH (NOLOCK)

Bu şekilde nolock ile çekilen sorgu cümlelerinde tablo lock posizyonda olsa bile deadlock hatası alınmaz ve sorgu gerçekleştirilir.

NoLock ile birlikte index kullanmakta mümkündür. Örneğin tablomuzun birden fazla index i olsun. Adları da index1,index2,index3 şeklinde olsun. Sorgumuzu index vererek çekmek için

Select * from Tablo_adi WITH (NOLOCK,INDEX = index2)

Bu şekilde ki bir kullanım hangi index in kullanılacağı belirtildiği için daha performanslı bir sonuç verecektir.

 

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar

Bu yazımda size gridview kullanarak bir tabloda ki verileri toplu halde güncellemeyi göstereceğim.

default.aspx dosyası

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <link href="Main.css" rel="stylesheet" type="text/css" />
    <link href="Tables.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
                <asp:Panel ID="pn_butons" runat="server">
                    <asp:Button ID="btnEdit" runat="server" OnClick="btnEdit_Click" Text="Değiştir" Width="60px" CssClass="buttons"/>
                    <asp:Button ID="btnUpdate" runat="server" OnClick="btnGuncelle_Click" 
                        Text="Güncelle" Enabled="False" CssClass="buttons"/>
                    <asp:Button ID="btnCancel" runat="server" OnClick="btnVazgec_Click" 
                        Text="Vazgeç" Enabled="False" CssClass="buttons"/>
                </asp:Panel>
                <br />
                <asp:Panel ID="Pn_Guncelle" runat="server">
                    <asp:GridView ID="gridView" runat="server" CellPadding="4" 
                        AutoGenerateColumns="False" CssClass="gridView" GridLines="Vertical" 
                        >
                        <AlternatingRowStyle CssClass="gridViewAlternatigRow" />
                        <EditRowStyle CssClass="gridViewEditRow" />
                        <EmptyDataRowStyle CssClass="gridViewEmptyDataRow" />
                        <FooterStyle CssClass="gridViewFooter" />
                        <HeaderStyle CssClass="gridViewHeader" />
                        <PagerStyle CssClass="gridViewPager" HorizontalAlign="Center" />
                        <PagerSettings FirstPageText="İlk Sayfa" LastPageText="Son Sayfa" 
                            Mode="NumericFirstLast" />
                        <RowStyle CssClass="gridViewRow" />
                        <SelectedRowStyle CssClass="gridViewSelectedRow" />
                        <Columns>
                            <asp:TemplateField HeaderText="ID">
                                <ItemStyle HorizontalAlign="Left" />
                                <ItemTemplate>
                                    <asp:Label ID="lEmp_ID" runat="server" Text='<%# Eval("emp_id") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Ad">
                                <ItemStyle HorizontalAlign="Left" />
                                <ItemTemplate>
                                    <asp:Label ID="lFName" runat="server" Visible='<%# !IsInEditMode %>' Text='<%# Eval("fname") %>'></asp:Label>
                                    <asp:TextBox ID="tbFName" runat="server" Visible='<%# IsInEditMode %>'
                                        Text='<%# Eval("fname") %>' ></asp:TextBox>   
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Soyad">
                                <ItemStyle HorizontalAlign="Left" />
                                <ItemTemplate>
                                    <asp:Label ID="lLName" runat="server" Visible='<%# !IsInEditMode %>' Text='<%# Eval("lname") %>'></asp:Label>
                                    <asp:TextBox ID="tbLName" runat="server" Visible='<%# IsInEditMode %>'
                                        Text='<%# Eval("lname") %>' ></asp:TextBox>   
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>			
                </asp:Panel>
    </form>
</body>
</html>

default.aspx.cs dosyası

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page 
{
    private bool isEditMode = false;
    DataTable dataTable = new DataTable();

    //saynın edit mod da olup olmadığını kontrol eden değişken
    protected bool IsInEditMode
    {
        get
        {
            return this.isEditMode;
        }

        set
        {
            this.isEditMode = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //verileri yukle
            GetVeri();
        }
    }

    //verileri gridview e yüklüyoruz
    protected void GetVeri()
    {
        SqlConnection sqlConnection = new SqlConnection("Initial Catalog=pubs;Data Source=TURGAY;User ID=sa;Password=");
        sqlConnection.Open();
        
        try
        {
            SqlCommand sqlCommand = new SqlCommand("Select emp_id,fname,lname from employee",sqlConnection);
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
            sqlDataAdapter.Fill(dataTable);
            gridView.DataSource = dataTable;
            gridView.DataBind();

            btnEdit.Enabled = true;
            btnUpdate.Enabled = false;
            btnCancel.Enabled = false;
        }
        finally
        {
            sqlConnection.Close();
        }
    }

    //Değiştir butonu
    protected void  btnEdit_Click(object sender, EventArgs e)
    {
        //edit mode u true yapıyoruz ki textbox lar gözüksün
        isEditMode = true;
        //verileri tekrar alıyoruz
        GetVeri();
        //butonların enable larını ayarlıyoruz
        btnEdit.Enabled = false;
        btnUpdate.Enabled = true;
        btnCancel.Enabled = true;
    }

    //guncelle butonu
    protected void  btnGuncelle_Click(object sender, EventArgs e)
    {
        SqlConnection sqlConnection = new SqlConnection("Initial Catalog=pubs;Data Source=TURGAY;User ID=sa;Password=");
        SqlCommand sqlCommand = new SqlCommand();
        sqlConnection.Open();
        sqlCommand.Connection = sqlConnection;
        try
        {
            sqlCommand.CommandText = "update employee set fname=@fname,lname=@lname where emp_id=@emp_id";

            sqlCommand.Parameters.Add("fname", SqlDbType.NVarChar);
            sqlCommand.Parameters.Add("lname", SqlDbType.NVarChar);
            sqlCommand.Parameters.Add("emp_id", SqlDbType.NChar);
            
            //rowları tek tek dönüyoruz
            foreach (GridViewRow row in gridView.Rows)
            {
                sqlCommand.Parameters["fname"].Value = ((TextBox)row.FindControl("tbFName")).Text;
                sqlCommand.Parameters["lname"].Value = ((TextBox)row.FindControl("tbLName")).Text;
                sqlCommand.Parameters["emp_id"].Value = ((Label)row.FindControl("lEmp_ID")).Text;
                //update i yapıyoruz
                sqlCommand.ExecuteNonQuery();
            }
            //butonları ayarlıyoruz
            btnUpdate.Enabled = false;
            btnCancel.Enabled = false;
            btnEdit.Enabled = true;
            //verileri tekrar çekiyoruz
            GetVeri();
        }
        finally
        {
            sqlConnection.Close();
        }
    }

    //vazgec butonu
    protected void  btnVazgec_Click(object sender, EventArgs e)
    {
        //butonları ayarlıyoruz
        btnUpdate.Enabled = false;
        btnCancel.Enabled = false;
        btnEdit.Enabled = true;
        //verileri cekiyoruz
        GetVeri();
    }
}

Herhangi bir şey sormak isterseniz yorum bölümünü kullanabilirsiniz.

Uygulamayı buradan indirebilirsiniz. TopluGuncelle.zip (5,21 kb)

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar

Bu yazımda JQuery de CSS ve Posizyon fonksiyonlarını anlatacağım.

Yazıyı 3 ana başlıkta toplayacağız. Bunlar

  • CSS işlemleri
  • Posizyon İşlemleri
  • Yükseklik ve Genişlik İşlemleri

 

JQuery de CSS İşlemleri

css(name) – Belirtilen elemanın name adlı özelliğinin değerini verir. Mesela button1 id li buton un background-color değerini almak için $(“#button1”).css(“background-color”)

css(properties) – Belirtilen elemanın istenen özelliklerini değiştirmek için kullanılır. Mesela button1 idli butonun background-color ve font-weight ini değiştirmek için
$(“#button1”).css({‘background-color’:’yellow’,’font-weight’:’bolder’})

css(key,value) – Belirtilen objenin key value mantığında css özelliğini değiştirmeye yarar. Mesela button1 id li button un background-color unu değiştirmek için
$(“#button1”).css(“background-color”,”yellow”)

 

JQuery de Posizyon İşlemleri (Position)

offset() – Belirtilen objenin ana dökümana göre left ve top ını öğrenmek için kullanılır. Örneğin button1 id li buton un sayfaya göre left ini bulmak için $(“#button1”).offset().left

position() – Belirtilen objenin üst parent ına göre left ve top ını öğrenmek için kullanılır. Örneğin button1 id li buton un üst parent ına göre left ini bulmak için $(“#button1”).position().left

scrollTop() – Belirtilen objenin eğer scroll u varsa scroll un yükselik olarak hangi posizyonda olduğunu verir.
$(“p:first”).scrollTop()

scrollTop(val) – Belirtilen objenin eğer scroll u varsa val değeri ile scroll un yükselik olarak posizyonu set edilir.
$(“div:first”).scrollTop(250)

scrollLeft() – Belirtilen objenin eğer scroll u varsa scroll un left olarak hangi posizyonda olduğunu verir.
$(“p:first”).scrollLeft()

scrollLeft(val) – Belirtilen objenin eğer scroll u varsa val değeri ile scroll un left olarak posizyonu set edilir.
$(“div:first”).scrollLeft(250)

 

JQuery de Yükselik ve Genişlik İşlemleri (Height - Width)

height() – Belirtilen objenin yükseliğini verir. $(“#button1”).height()

height(value) – Belirtilen objenin yükseliğini set etmeye yarar. $(“#button1”).height(100)

width() – Belirtilen objenin genişliğini verir. $(“#button1”).width()

width(value) – Belirtilen objenin genişliğini set etmeye yarar. $(“#button1”).width(100)

innerHeight() – Belirtilen objenin border ve padding gibi özelliklerinin eklenmiş yükseliğini verir. $(“#p1”).height()

innerwidth() – Belirtilen objenin border ve padding gibi özelliklerinin eklenmiş genişliğini verir. $(“#p1”).width()

 

Anlatacağımız fonksiyonlar bu kadar.

Daha fazla bilgi ve örneğe JQuery sayfasından erişebilirsiniz.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar,

Bu yazımda vereceğim sql ler ile database de ki triger ları silmeden deaktif ve aktif etmeyi yapabileceksiniz.

Deaktif edecek fonksiyon

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_DISABLE_ALL_TRIGGERS]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP Procedure P_DISABLE_ALL_TRIGGERS
GO

CREATE  PROCEDURE dbo.P_DISABLE_ALL_TRIGGERS AS
DECLARE @TableName VARCHAR(30)
BEGIN TRANSACTION
DECLARE Tables CURSOR FOR
  SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
  WHERE TABLE_TYPE   = 'BASE TABLE'
OPEN Tables
FETCH NEXT FROM Tables INTO @TableName
  WHILE @@FETCH_STATUS = 0
  BEGIN
    EXEC('ALTER TABLE ' +  @TableName + ' DISABLE TRIGGER ALL')
    FETCH NEXT FROM Tables INTO @TableName
  END
  IF @@error != 0 ROLLBACK TRANSACTION
  ELSE            COMMIT TRANSACTION
CLOSE Tables
DEALLOCATE Tables

GO

Aktif edecek fonksiyon

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_ENABLE_ALL_TRIGGERS]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP Procedure P_ENABLE_ALL_TRIGGERS
GO

CREATE  PROCEDURE dbo.P_ENABLE_ALL_TRIGGERS AS
DECLARE @TableName VARCHAR(30)
BEGIN TRANSACTION
DECLARE Tables CURSOR FOR
  SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
  WHERE TABLE_TYPE   = 'BASE TABLE'
OPEN Tables
FETCH NEXT FROM Tables INTO @TableName
  WHILE @@FETCH_STATUS = 0 BEGIN
     EXEC('ALTER TABLE ' +  @TableName + ' ENABLE TRIGGER ALL')
     FETCH NEXT FROM Tables INTO @TableName
  END
  IF @@error != 0 ROLLBACK TRANSACTION
  ELSE            COMMIT TRANSACTION
CLOSE Tables
DEALLOCATE Tables

GO

Kullanımları

exec dbo.P_DISABLE_ALL_TRIGGERS

exec dbo.P_ENABLE_ALL_TRIGGERS

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar.

SQL Server 2000 e internet üzerinden ulaşmak için aşağıda ki adımları yapmamız gerekmektedir.

Çok önceden internetten indirdiğim bu dökümanı hangi sayfadan aldığımı bilmediğimden ne yazık ki kaynak gösteremiyorum.

Yapılacak işlemler aşağıdadır.

1.Server Network Utility

1.Başlat >> Programlar >> Microsoft SQL Server >> Server Network Utility (*) SQL Server Desktop Edition için ‘Server Network Utility’ uygulamasına ‘C:\Program Files\Microsoft SQL Server\80\Tools\Binn\svrnetcn.exe’ yolundan erişilebilir.

sql1

2.TCP/IP aşağıdaki gibi sağ tarafta değilse sağ tarafa taşınır. Bunu yapmak için TCP/IP seçildikten sonra ortadaki ‘enable >>’ butonuna basılır.

sql2

3.TCP/IP seçildikten sonra
(1)’Properties’ butonuna basılır.Açılan pencerede
(2)’default port’ kısmının ‘1433’ olduğuna emin olduktan sonra
(3)’OK’ butonuna basılır.
‘SQL Server Network Utility‘ penceresinde ‘Apply’ ve ‘OK’ butonlarına sırayla basılır.

sql3

 

2.Client Network Utility

1. Başlat >> Programlar >> Microsoft SQL Server >> Client Network Utility(*) SQL Server Desktop Edition için ‘Client Network Utility’ uygulamasına ‘C:\WINDOWS\system32\cliconfg.exe’ yolundan erişilebilir.

sql4

2. TCP/IP aşağıdaki gibi sağ tarafta değilse sağ tarafa taşınır. Bunu yapmak için TCP/IP seçildikten sonra ortadaki ‘enable >>’ butonuna basılır.

sql5

3. TCP/IP seçildikten sonra
(1)’Properties’ butonuna basılır.Açılan pencerede
(2)’default port’ kısmının ‘1433’ olduğuna emin olduktan sonra
(3)’OK’ butonuna basılır.

sql6

4.’Alias’ kısmında kayıt yoksa ‘Add…’ butonuna , kayıt varsa (aşağıdaki gibi) ‘Edit…’ butonuna basılır.

sql7

5.Açılan pencerede Sol taraftaki seçeneklerden TCP/IP seçilir. (2) ‘Server Alias’ kısmına static IP adresi veya varsa domain ismi yazılır.‘Server Name’ kısmının doğru ve ‘Dynamically determine port’ seçeneğinin seçili olduğundan emin olduktan sonra (3) ‘OK’ butonuna basılır. ‘SQL Server Client Network Utility‘ penceresinde ‘Apply’ ve ‘OK’ butonlarına sırayla basılır.

sql8

 

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar,

Bazı tablolara select çektiğimizde input/output hatası alabilmekteyiz. Böyle bir durum indexlerde ki problemden kaynaklanmaktadır.

Bunu düzeltebilmek için aşağıda ki kodları uyguluyoruz.

Önce database in single user control özelliğini true yapıyoruz. DENEME diye yazdığımız yer düzeltmek istediğimiz database in adı.

exec sp_dboption 'DENEME','single user','true'

Daha sonra Data kaybını göze al seçeneği ile beraber CheckDB prosedure ünü uyguluyoruz.

DBCC CHECKDB ('DENEME', REPAIR_ALLOW_DATA_LOSS)

En son işlem olarak datayı tekrar single user false posizyonuna çekiyoruz.

exec sp_dboption 'DENEME','single user','False'

Bu işlemler sonucunda input/output hatası ortadan kalkacaktır.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar.

SQL Server 2000 kurarken şöyle bir hata ile karşılaşmanız mümkün.

“A previous program installation created pending file operations on the installation machine. You must restart the computer before running setup. “

Kurulum bu hatayı verdikten sonra devam etmez ve kapanır.

Adım adım bu hatayı nasıl ortadan kaldıracağımızı görelim.

1- Öncelikle makineyi restart edip tekrar deniyoruz. Eğer gene sonuç almazsak 2.adıma geçiyoruz.

2-Başlat tan çalıştıra gelip regedit yazıp ok e basıyoruz.

3-Editör de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager a kadar geliyoruz.

4-Bu bölümü export ediyoruz ki bir problem olursa geri dönebilelim.

5-Bu bölümde ki PendingFileRenameOperations yazısını bulup sağ tık yapıp siliyoruz.

6-regedit ten çıkıyoruz.

7-Makinayı restart edip deniyoruz. Kurulum problemsiz çalışacaktır.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar.

Bu makalemde recursive (kendini çağıran) fonksiyon kullanarak bir TreeView nasıl doldurulur bunu göstereceğim.

Örneğimizde şunu yapacağız. İçi dolu olan bir treeview de ki bütün verilerip alıp diğer treeview e yazacağız.

tv1

Kodumuz şu şekilde olacak.

    protected void bt_Kopyala_Click(object sender, EventArgs e)
    {
        //2.tree de ki bütün node ları siliyoruz.
        TreeView2.Nodes.Clear();
        //ilk tree mizde ki ana node ları geziyoruz.
        foreach (TreeNode tn in TreeView1.Nodes)
        {
            //ana node u 2.tree ye ekliyoruz.
            TreeNode tnx = new TreeNode(tn.Text.ToString(),tn.Value.ToString());
            TreeView2.Nodes.Add(tnx);

            //ana node un alt node u varsa GetNode metod una giriyoruz.
            if (tn.ChildNodes.Count > 0)
                GetNode(tn,tnx);
        }
        //2.tree de ki bütün node ları açıyoruz
        TreeView2.ExpandAll();
    }
    protected void GetNode(TreeNode tn, TreeNode tnx)
    {
        //gelen node un altında ki node ları dönüyoruz.
        foreach (TreeNode tnCek in tn.ChildNodes)
        {
            //node ları 2. tree ye ekliyoruz.
            TreeNode tnEkle = new TreeNode(tnCek.Text.ToString(),tnCek.Value.ToString());
            tnx.ChildNodes.Add(tnEkle);

            //eğer node un alt node u varsa tekrar GetNode metod unu çağırıyoruz.
            if (tnCek.ChildNodes.Count > 0)
                GetNode(tnCek, tnEkle);                
        }
    }

Verileri veritabanından da çekip tree ye doldurabilirsiniz. Mantık aynı şekilde.

Sormak istediğiniz bir şey olursa yorum kısmında sorabilirsiniz.

Uygulamayı buradan indirebilirsiniz. TreeView.zip (7,87 kb)

Kolay Gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar,

Hepimiz sayfalarımızda kendi yaptığımız yada web den hazır olarak bulduğumuz template ler kullanmaktayız. Çoğunlukla bu templet lerde de top,left ve bottom kısımları olmakta.

ASP de geliştirme yaparken bu kısımları ayrı ayrı dosyalar yapıp her dosyamızda include ediyoduk. Ama ana şablonda bir değişiklik yapmak bazen oldukça güç oluyordu.

Visual studio da ise bunun için kullanabileceğimiz MasterPage şablonu var. Bu makalemizde MasterPage i nasıl kullanacağımızı göreceğiz.

Önce yeni bir web site başlatıyoruz. Daha sonra Add New Item bölümünde aşağıda gördüğünüz gibi Master Page i seçiyoruz ve bir isim vererek kaydediyoruz.

mp1

Master page in kodunda göreceğiniz

        <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
        
        </asp:ContentPlaceHolder>

kısmı sayfalarımızın geleceği kısım. Bunu baz alarak masterpage i istediğimiz gibi düzenliyoruz.

Masterpage şu şekilde olsun.

mp2

Şimdi yeni bir sayfa yapalım ve bu sayfanın masterpage inin bizim masterpage imizi olduğunu gösterelim.

Bunun için Add New Item dan Web Form seçiyoruz ve Select Master Page yazısının yanında ki tiki tikliyoruz. Add e bastığımızda bizi hangi masterpage i seçmek istediğimizi soruyor. Burada kendi masterpage imizi seçiyoruz ve ok e basıyoruz. Bu sayfadayken design e geçtiğimizde daha design aşamasında bile masterpage in sayfaya etkisini görebiliyoruz. Bu şekilde daha design ederken sayfamızın ne şekilde görüneceğini görebiliyoruz.

mp3

ASP.Net te MasterPage kavramı bu şekilde. Sormak istediğiniz bir şey olursa yorum bırakabilirsiniz.

İlgili uygulamayı buradan indirebilirsiniz. MasterPage.zip (4,55 kb)

Kolay Gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan