Dropdownlist ve Gridview uygulaması


Deprecated: Function create_function() is deprecated in /var/www/vhosts/digitaldunyam.net/coder.digitaldunyam.net/wp-content/plugins/codecolorer/lib/geshi.php on line 4698

Asp.net ile geliştirilen web uygulamaların da dropdownlist ve gridview bir arada her zaman ihtiyaç duyularak kullanılmıştır. Bu kontrollerin yer aldığı dropdownlist’in gridview ile bağlantılı bir uygulama yapalım.

dropdownlist-gridview-uygulamasi

Örneğimizdeki senaryo şöyle olsun; üniversitenin kampüslerindeki bölümler ve o bölümlerde derslerin kredilerini görebileceği, veritabanı kısmında okul-bölüm-ders ilişkisinde geçen, kullanıcının dropdownlist de seçeceği okulun tekrar dropdownlist ile seçeceği bölümündeki ders kredilerinigridview de görebileceği mini rapor ekran yapısını uygulayalım.

İlk önce veritabanı tarafında 3 tane tablo oluşturalım. Tablolarımız isim ve sırasıyla tblOkul, tblOkulBolum, tblBolumDers.

Tablo yapısı ve kolon özellikleri

tablo-yapisi

Resimdeki gibi tabloları; değişken tiplerini, isimlerini ve primary key olan id kolanlarının Identity Column özelliğini id olarak atayarak oluşturun.

Oluşturulan tabloları aşağıdaki diyagram resmindeki gibi ilişkilendirin. tblOkul tablsundaki id ile tblOkulBolum tablosundaki okulu kolonu, tblOkulBolum tablsundaki id ile tblBolumDers tablosundaki bolumu kolonu ilişkilendirilmiş. Resim üzerinde de anlaşılması için mavi oklu kolonlar ile kırmızı oklu kolonlar ilişkilendirilmiş.

İlişkilendirilmiş tablolar diyagram ekranı
tablo-iliskilendirmesi

İlişkilendirme de yaptıktan sonra kolonlara veri girişi yapabiliriz. Hayali olarak kampüs ve ilgili bölümlerini aşağıdaki resimdeki gibi doldurdum. Tabloları sırasıyla tblOkul, tblOkulBolum, tblBolumDers şeklinde doldurun.(Tablolardaki id ler otomatik artacağından o kısma isteseniz de veri girişi yapamazsınız.)

Veritabanındaki tablo içeriği
tablo-icerigi-girilmesi
Tablolarımız birbirleri ile ilişkilendirildiği için okulu ve bölümü kolonlarını sadece ilgili tablosundaki numarasını yazıyoruz. (Yeni başlayanlar için önerim, resimdeki ve yazdığım tablo isimleri gibi birebir giriş yaptıklarında kod tarafında da fazla bir şey değiştirmeden hata almadan örneği çalıştırabilir.)

Veritabanı tarafını yaptıktan sonra Asp.net tarafına geçebiliriz. Yeni proje oluşturduktan sonra ilk önce web.config dosyamıza veritabanı bağlantımızı alttaki gibi belirlenen kod blogu aralığına yazalım. Burada kendi veritabanınızı kullanacağınız için, veritabanı ismi ve diğer kısımlara takılmamanızı ümit ediyorum.(Local de kod isimini verdiğim veritabanımı kullanıyorum)

Web.config dosya içerği

webconfig-connectionstring

Tasarım kısmında görseldeki gibi ekran hazırlayalım. Kullandıklarım, 2 adet dropdownlist , 1 buton, 1 gridview. Dropdownlist kontrollerinin AutoPostBack özelliğini true yapmayı unutmayın !

Asp.net tasarım ekranı

aspnet-sayfa-duzeni

Tasarım kısmını da bitirdikten sonra kod kısmına geçebiliriz. İlk önce sayfanın  Page_Load kısmından sayfa ilk açıldığında veritabanındaki okul isimlerinin başlangıçta 1. dropdownlist temize gelmesini istiyoruz. Diğer açıklamaları da kod kısmında bulabilirsiniz.

Eklemeyi unutmayın !

1
2
3
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
string constr = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString; // Bağlantı satırını global tanıplayıp tekrar tekrar yazma ihtiyacı duymuyoruz.
        protected void Page_Load(object sender, EventArgs e)
        {
            // Dropdownlist kontrol isimlerini ddOkul ve ddBolum olarak atadım !  
            // Sayfa açılır açılmaz tblOkul tablomuzdaki okul isimlerini ddOkul(dropdownlist) kontrolümüze veritabanımızdan çekiyoruz.
            if (!IsPostBack)
            {

                SqlConnection sql = new SqlConnection(constr);
                SqlCommand com = new SqlCommand("Select id, okul from tblOkul", sql);

                try
                {
                    sql.Open();
                    SqlDataReader reader = com.ExecuteReader();

                    ddOkul.DataSource = reader;
                    ddOkul.DataValueField = "id";
                    ddOkul.DataTextField = "okul";
                    ddOkul.DataBind();
                    reader.Close();
                }

                catch
                {
                    Response.Write("Bir hata oluştu");
                }

                sql.Close();
            }
        }

        protected void ddOkul_SelectedIndexChanged(object sender, EventArgs e)
        {

            // Seçilen okul karşılığında önceden veritabanımız da kayıtlı bulunan okuldaki bölümler, ddBolum(dropdownlist) kontrolümüz de listelenencek.
                SqlConnection sql = new SqlConnection(constr);
                SqlCommand com = new SqlCommand("Select id, bolum from tblOkulBolum where okulu='" + ddOkul.SelectedItem.Value +"'", sql);

                try
                {
                    sql.Open();

                    SqlDataReader reader = com.ExecuteReader();

                    ddBolum.DataSource = reader;
                    ddBolum.DataValueField = "id";
                    ddBolum.DataTextField = "bolum";
                    ddBolum.DataBind();
                    reader.Close();
                }

                catch
                {
                    Response.Write("Bir hata oluştu");
                }

                sql.Close();

        }

        protected void btnListele_Click(object sender, EventArgs e)
        {

            SqlConnection sql = new SqlConnection(constr);
            SqlCommand com = new SqlCommand("Select  dersler, kredi from tblBolumDersler where bolumu='" + ddBolum.SelectedItem.Value + "'", sql);

            try
            {
                sql.Open();

                SqlDataReader reader = com.ExecuteReader();

                DataTable tablo = new DataTable();
                tablo.Load(reader);
                GridView1.DataSource = tablo.DefaultView;
                GridView1.DataBind();

                reader.Close();
            }

            catch
            {
                Response.Write("Bir hata oluştu");
            }

            sql.Close();
        }

Burada bazı bölümlerin dersleri gridview kontrolünde göstermeyebilir. Sadece Maltepe MYO okulundaki Bilgisayar ve Muhasebe derslerini verirabanımıza kayıt ettiğimiz için örneğimizde sadece 2 bölümün dersleri göstermekte.

Ajax ile saati güncel gösterme

Mini bir uygulama ile merhaba. Web sitelerinde karşılaştığımız güncel saati yani dijital saat gibi saatin, saniyelerin ilerlediği yapıyla karşılaş mısınızdır. Asp.net ile saati saniyeleri güncel hareketli göstermek için sayfayı her saniye yenilememiz gerekecek. İşte bu ve buna benzer durumlarda yardımımıza Ajax web teknolojisi geliyor.

Saati kullanıcıya gösterebilmek için javascript den de yaralanabiliriz. Fakat biraz daha fazla kod yazmak gerekir. Ajax da bunu timer ile kolaylıkla yapabiliyoruz. Ajax timer hakkında daha fazla bir şey konuşmadan direk mini uygulamamıza geçiyorum.

İlk olarak sayfamıza ScriptManager ardından UpdatePanel bunun içerisine Label ve Ajax Timer ekliyoruz. Bunları yaptıktan sonra alttaki arayüz formu kodları gelmekte. Timer Interval değerine 1000, ontick olayına da Timer1_Tick yapıyoruz.

1
2
3
4
5
6
7
8
9
 <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                <asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick">
                </asp:Timer>
            </ContentTemplate>
        </asp:UpdatePanel>

Bundan sonra yapmamız gereken timer tick olayında Label text özelliğine tarihi göstermek kalıyor. Ve bunun da kodu aşağıdaki gibi.

1
2
3
4
protected void Timer1_Tick(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.ToString();
        }

Asp.net şehir-ilçe Dropdownlist uygulaması

Yapacağımız bu midi programda; Ajax, Dropdownlist, Postback, Updatepanel gibi Asp.net teknolojileri ile karşılaşacağız.

Programımızın ne işe yaradığını konuşalım. Tek başına bir işe yaramıyor, amaç dropdownlist birbirlerini tetiklemesi sonucunda ortaya çıkarabileceğimiz verileri göstermek. İllaki karşınıza gelmiştir; dropdownlist den şehri seçtiğimizde seçilen şehre göre ilçelerin diğer dropdownlist kontrolün de gösterilmesine şahit olmuşsunuzdur.

Programımızda kullandığımız bir diğer vurgulamak istediğim konu ise Ajax UpdatePanel ile sayfayı tamamen sunucuya göndermeden Dropdownlist’in seçili olan verisine göre diğer Dropdownlist’i doldurmak.

Programa geçmeden önce kullanacağımız araç gereçleri sıralayalım; Bir adet ilişkisel veritabanı (üst resimdeki gibi tblsehir(id(int) ,sehir(nvarchar)) ve ilçe(id(int), ilce(nvarchar), sehri(int)) tabloları, tblilce tablosundaki sehri kolonu ile tblsehir kolonundaki id ile birbirine bağlayın!). Görünüm için sayfamıza Ajax ScriptManager, UpdatePanel, eklediğimiz UpdatePanel içerisine 2 adet Dropdownlist ve bir adet etkisiz buton. Burada şehir Dropdownlist’in AutoPostBack özelliğini True yapmayı unutmayın!

İlişkisel veritabanımızı ve sayfamızın dizayn kısmını oluşturduktan sonra kod kısmına geçebiliriz.

İlk önce karmaşaı önlemek için Web.config’e veritabanı bağlantımızı gerçekleştirelim.

1
2
3
4
   <connectionStrings>
    <clear />
    <add name="LocalSqlServer" connectionString="server=.; database=coder; trusted_connection=true;" />
    </connectionStrings>

Bağlantıdan sonra sayfanın Page_Load’ına aşağıdaki gibi dropdownlist kontrolünü veritabanın dan gelecek şehirler verisi ile dolduruyoruz.

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
31
 protected void Page_Load(object sender, EventArgs e)
        {

            // DropDownList3 = sehirler kontrolü
            // DropDownList4 = ilçeler kontrolü
            if (!IsPostBack)
            {
                string constr = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
                SqlConnection sql = new SqlConnection(constr);
                SqlCommand com = new SqlCommand("Select id, sehir from tblsehir", sql);

                try
                {
                    sql.Open();
                    SqlDataReader reader = com.ExecuteReader();

                    DropDownList3.DataSource = reader;
                    DropDownList3.DataValueField = "id";
                    DropDownList3.DataTextField = "sehir";
                    DropDownList3.DataBind();
                    reader.Close();
                }

                catch
                {
                    Response.Write("Bir hata oluştu");
                }

                sql.Close();
            }
        }

DropDownList3 yani şehirle listesinin SelectedIndexChanged’ine alttaki kodları yazıyoruz. Burada bağlantıyı globa olarak tanımlayabilirsiniz.

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
  protected void DropDownList3_SelectedIndexChanged(object sender, EventArgs e)
        {            
                string constr = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
                SqlConnection sql = new SqlConnection(constr);
                SqlCommand com = new SqlCommand("Select id, ilce from tblilce where sehri=" + DropDownList3.SelectedItem.Value, sql);

                try
                {
                    sql.Open();

                    SqlDataReader reader = com.ExecuteReader();

                    DropDownList4.DataSource = reader;
                    DropDownList4.DataValueField = "id";
                    DropDownList4.DataTextField = "ilce";
                    DropDownList4.DataBind();
                    reader.Close();
                }

                catch
                {
                    Response.Write("Bir hata oluştu");
                }

                sql.Close();

           
        }

Asp.net veritabanı bağlantısı

Asp.net projemizde veritabanı bağlantısı yapmanın en mantıklı yolu web.config dosyasına yapılan ConnectionString blogu açarak yapmak. İnternet aleminde bu minik konu hakkında birkaç kelam yazı yazılmış olsa da buda bizden diyerek den Asp.net projemizde tüm sayfaları veritabanı ile bağlantılı yapabilmek için alttaki kodları yazmamız gerekmekte.

Veritabanımız yerelde yani kendi bilgisayarımızda ise alttaki kodları Web.config dosyasında configuration ile system.web blogunun arasına ekliyoruz. Clear ile daha önceki bağlantıları temizlemiş oluyoruz.

1
2
3
4
<connectionStrings>
    <clear/>
    <add name="LocalSqlServer" connectionString="server=.; database=trende; trusted_connection=true;" />
  </connectionStrings>

Sunucudaki yani dışarıdaki veri tabanına bağlanmak için ise ms sql veribanınızın bazı bilgilerini bilmeniz gerekmekte. Server ip adresi, database adı, database kullanıcı adı ve şifresi

1
2
3
4
5
6
 <connectionStrings>
    <clear/>
   
    <add name="LocalSqlServer" connectionString="Data Source=ip-adresi;Initial Catalog=database-adi; User Id=user-id;Password=sifre;"
        providerName="System.Data.SqlClient" />
  </connectionStrings>

Connectionstrings örnek bağlantıları için connectionstrings.com ziyaret etmenizde fayda olacaktır.

Asp.net toplam ve online ziyaretçi sayısı göster

Asp.net sitemizde toplam ziyaretçi sayısı ve anlık online ziyaretçi sayısını Session yardımı ile sitemizde gösterebiliriz. Server tarafında çalışan web.config dosyasına benzer Global.asax özel dosya ile kolaylıkla toplam ve online ziyaretçi sayısını kullanıcıya gösterebiliriz.

Bu mini Asp.net ziyaretçi sayacını yapabilmek için, sayıyı gösterecekherhangi .aspx dosyası ve Global Application Class(Global.asax) dosyalarını projemize ekleyerek başlayabiliriz.

Eklediğimiz Global.asax dosyasını açarak ilk sıradaki Application_Start metoduna

1
2
3
4
5
  protected void Application_Start(object sender, EventArgs e)
        {
            Application.Add("toplamziyaretci", 0);
            Application["onlineziyaretci"] = 0;
        }

Kullanıcı siteye ziyaret ettiğinde yani session açtığında yapılacak olan işlemler. Toplam ziyaretci ve online ziyaretçi sayısını 1 arttırıyoruz.

1
2
3
4
5
 protected void Session_Start(object sender, EventArgs e)
        {
            Application["toplamziyaretci"] = ((int)Application["toplamziyaretci"]) + 1;
            Application["onlineziyaretci"] = ((int)Application["onlineziyaretci"]) + 1;
        }

Session_End metodunda ise gelen ziyaretçi siteden çıktığında online ziyaretçi saysını 1 azaltmak için yazıyoruz.

1
2
3
4
 protected void Session_End(object sender, EventArgs e)
        {
            Application["onlineziyaretci"] = ((int)Application["onlineziyaretci"]) - 1;
        }

Ziyaretçiye gösterebilmek için herhangi bir sayfanın Page_Load kısmına aşağıdaki gibi yazıyoruz.

1
2
3
4
5
6
protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("Toplam ziyaretci sayısı : " + Application["toplamziyaretci"]);
            Response.Write(" <br/>");
            Response.Write("<br/> Online ziyaretci sayısı : " + Application["onlineziyaretci"]);
        }

Global.asax özel dosyası ile Asp.net sayacımı oluştu.

Aspnet QueryString makale gösterme

Başlık biraz anlamsız oldu anlıyorum sizi… Basit bir konu ile merhaba. Dinamik web sitelerinde kullanılan veritabanı ile ilişkili içerik yayınlama siteleri, kısaca basit makale okuma sitelerindeki database den makalenin sayfada nasıl gösterileceğini görelim.

Basit ve genel konu olduğu için araştırdığım kadarıyla çoğu site değinmemiş olaya. Direk konuya girersek, önceden hazırlarnmış veritabanımız ve tablomuz olsun. İçinde sade bir şekilde (id, baslik, makale) kolonları olsun. Görsel kısımda da bir ana.master sayfamız default ve makaleoku sayfalarımız olsun.

Birkaç ufak css ile ana.master sayfamızı başlıkların bulunduğu menü 300px ve yazının gösterileceği 600px lik alan ile ikiye bölünsün. Ana.master sayfamızın menüsüne güncel konular başlığı altında Datalist ekleyerek attaki gibi kodlayalım;

1
2
3
4
5
6
7
8
9
<asp:DataList ID="DataList1" runat="server" DataKeyField="yid"
        Width="224px">
        <ItemTemplate>
         
          <asp:HyperLink ID="HyperLink1" runat="server" Text ='<%# Eval("baslik") %>' NavigateUrl ='<%# "~/oku.aspx?giden="+Eval("yid")%>'>HyperLink</asp:HyperLink>              
         
         </ItemTemplate>
         <AlternatingItemStyle BackColor="Gainsboro" />
     </asp:DataList>

F7 ile kod kısmına gelerek postback ile kontrol edip load kısmına metod yardımı ile veri tabanımızdaki son 5 makaleyi gösterelim;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 if (Page.IsPostBack)
            {
                return;
            }
            doldur();

 private void doldur()
        {        
            SqlConnection sql = new SqlConnection("server=.; database=coder; trusted_connection=true;");
            SqlCommand cmd = new SqlCommand("Select top 5 * from tblyazi ", sql);
            DataTable dt = new DataTable();
            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            sql.Open();
            adp.Fill(dt);
            SqlDataReader oku = cmd.ExecuteReader();
            if (oku.Read())
            {
                DataList1.DataSource = dt;
                DataList1.DataBind();

            }
            sql.Close();
        }

ana.master menümüzdeki son 5 yazıyı gösterdikten sonra makaleyi okuma kısmına geçebiliriz. Basit bir şekilde olması için makaleoku sayfasına başlık için label ve makale için bir label ekleyin. F7 ile kod kısman geçip load kısmına alttaki kodları yerleştirdikten sonra işlemi bitirelim;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
protected void Page_Load(object sender, EventArgs e)
        {
          SqlConnection sql = new SqlConnection("server=.; database=coder; trusted_connection=true;");

           
            int icerik = int.Parse(Request.QueryString["giden"]);

           
            SqlDataAdapter adp = new SqlDataAdapter("select * from makaletablosu where id=" + icerik, sql);
            DataTable dt = new DataTable();
            adp.Fill(tablo);
            Label1.Text = dt.Rows[0]["baslik"].ToString();
            Label2.Text = dt.Rows[0]["yazi"].ToString();

}

İşlem bu kadar, dikkat edilmesi gereken nokta Querystring dediğimiz yapı üzerinde. Başlıkları gösterdiğimiz ana.master sayfasında görsel kısmında ~/oku.aspx?giden= giden string i yakalayıp makaleoku sayfasında kod kısmında int.Parse(Request.QueryString[“giden”]); diyerek urlden gelen stringi yakalayıp makale id’sine göre veritabanından veriyi çekip göstermektek.

Sunucudaki veritabanına Membership kurulumu

Asp.net Membership yeni öğrenenler localdeki veritabanına örnek çalışma ve uygulamalar için birkaç kez Membership yapısını kurmuşuzdur. Fakat sunucudaki veritabanına bildiğimiz şekilde kurulumu yapamayız. Localdekinden farklı kuruluma sahip olan uzak sunucudaki membership kurulumunda yapılması gereken yol, birkaç satır komut hariç neredeyse aynı.

Benzer şekilde projemizi oluşturup, sunucudaki veritabanını oluşturduktan sonra Command Prompt ‘u açıp alttaki komutları kullanıcı adı, şifre vs. bilgilerinize göre doğru şekilde yazıp çalıştırın.

[stextbox id=”info”]aspnet_regsql -S Server Ip adresi -U Kullanıcı Adı -P Şifre -d Database -A all[/stextbox]

Bunu yaptıktan sonra localdeki gibi daha sonra çıkan kurulumu kendisi yapıp tabloları ekliyor. Bundan sonra yapmanız gereken web.config gibi ilgili yere database bağlantınızı yazıp, localhost kurulumu gibi Configuration ayarlarını yapıp işlemi bitirmek.

Uzaktaki veritabanı için gerekli connectionstring;

1
2
3
4
5
6
<connectionStrings>
    <clear />

    <add name="LocalSqlServer" connectionString="Data Source=sunucu ip;Initial Catalog=database; User Id=kullaniciid;Password=database şifresi;"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

Asp.net Membership özellikleri

Machine.config dosyasında bulunan daha çok üyelik için kullanılan Asp.net Membership yapısındaki özellikleri inceleyelim. Uygulamamızda Web.Config içerisinde system.web blogunun içine eklediğimiz Membership providers’ın da bulunan özellikler ve açıklaması;

connectionStringName : Uygulamada kullanılan veritabanını bağlayan connectionstring isminin yeri.

enablePasswordRetrieval : Unutulan şifreyi geri alma yapılsın mı. True olursa eski şifre gönderilecek, false olursa kullanıcıya yeni şifre gönderir. Ayrıca passwordFormat hasked olursa burası true olamaz.

enablePasswordReset : Şifreyi sıfırlama için kullanılır.

enablePasswordRetrieval false ise bunun true olaması gerekir.

requiresQuestionAndAnswer : Gizli soru; true soru olsun, false gizli soru olmasın.

applicationName : Kullanılacak uygulamalar buraya yazılır. Şimdilik üyelik uygulamsını kullanacağımız için / işareti ile devam ediyoruz.

requiresUniqueEmail : Aynı mail hesabı ile birden fazla üye olsun mu. True yaparsanız kullanılan mail adresiyle bir tane hesap açılır.

passwordFormat : Üye şifrelerinin veritabanında tutacağı format yeri. Burada 3 tane şifreleme tipi bulunmakta. Bunlar Clear, yaptığımızda şifre olduğu gibi veritabanında görülür, encrypt yaptığımızda geri çevirebilir şekilde şifreyi şaklıyo, hashed ile yapılan paralo geri döndürülemez yani yazılan şifre tekrardan eski haline gelemez.

maxInvalidPasswordAttempts : En fazla kaç kere yanlış parola girilebilir. Bu özellik sonucunda passwordAttemptWindow özelliğini çalıştırarak anlam kazanmakta. Normalde passwordAttemptWindow =10 dakika yani 5 kez yanlış parola giren üye 10 dakika login olması yasaklanacak.

minRequiredPasswordLength : Şifrenin en az kaç karakterli olacağını belirten özellik.

minRequiredNonalphanumericCharacters : Şifrede alfa numerik karakter olsun mu yani semboller = ? / gibi olmasını isterseniz 1(kaç tane alfa numerik karakter olmasını istiyorsanız o kadar sayı) yapmanız gerekir, istemiyorsanız değeri 0 yapmanız yeterli olacak

passwordStrengthRegularExpression : Şifrenin güvenilirliğini buradan ayarlanmakta