17 Mart 2012 Cumartesi

Ajax ColorPicker Extender

   ColorPicker, bir ASP.NET TextBox kontrolüne iliştirilerek kullanılan bir ASP.NET AJAX extender türüdür. Client-side olarak bir popup kontrolünde renk seçmemizi sağlar. Renk paletine tıklarak istediğiniz rengi seçebilmeniz mümkün. Seçtiğiniz rengin 16'lık sayı tabanına göre belirlenmiş sayısal değeri iliştirilen TextBox kontrolünde gözükür. Aynı zamanda opsiyonel olarak bir PopupButton ve SampleControl tanımlamanız mümkün. 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ColorPickerExtender.aspx.cs"
    Inherits="Deneme.Ajax.ColorPickerExtender" %>


<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<!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>ColorPicker</title>
</head>
<body id="bodyTag" runat="server">
    <form id="form1" runat="server">
    <div>
        <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
        </asp:ToolkitScriptManager>
        <br />
        <br />
        <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"></asp:TextBox>
        <asp:ColorPickerExtender ID="TextBox1_ColorPickerExtender" runat="server" Enabled="True"
            TargetControlID="TextBox1" SampleControlID="Button1">
        </asp:ColorPickerExtender>
        <br />
        <br />
        <br />
        <br />
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </div>
    </form>
</body>
</html>

   Yukarıdaki program kodumda 1 TextBox ve bu TextBox ile ilişkilendirilmiş bir ColorPicker extender ve bir de Button kontrolüm var. ColorPickerExtender TargerControlID değerim TextBox1 kontrolünü gösteriyor. (yani hedef kontrolüm) SampleControlID değeri seçilen rengin etkileyeceği kontroldür. Burada bir buton kontrolü kullandım fakat farklı kontroller de kullanmak mümkün. Renk paletinden herhangi bir renk seçildiğinde buton kontrolümün arkaplan rengi seçilen renk olacak ve textbox kontrolünde de seçilen rengin 16'lık sayı sistemindeki karşılığı gösterilecek. Bu örnek çok basit bir örnek. ColorPickerExtender daha karmaşık ve farklı amaçlarla kullanılabilir.

   ColorPickerExtender Özellikleri:
  • TargetControlID - Renk toplayıcının genişletildiği TextBox kontrolünün ID değeri.
  • PopupButtonID - Tıklandığında ColorPicker paletinin açılacağı kontrolün ID değeri.
  • SampleControlID - ColorPicker' in seçtiği rengin gösterildiği kontrolün ID değeri. Eğer bu değer ayarlanmışsa ve renk toplayıcısının açılır penceresi farenin üzerine geldiğinde ilgili renk değeri kontrolün arkaplan rengi haline gelir. Eğer bu değer ayarlanmamışsa seçilen renk gösterilmez. 
  • PopupPosition - Renk toplayıcı açılır penceresinin nerede gösterileceğini belirtir. Varsayılan değeri BottomLeft(Aşağı-sol) taraftadır.
  • SelectedColor - ColorPicker extender baştıldığında seçili olarak gelen renk.
  • OnClientColorSelectionChanged - colorSelectionChanged olayı meydana geldiğinde çağrılacak olan JavaScript fonksiyonu.

Object Must Implement IConvertible

Object Must Implement IConvertible

Yukarıdaki gibi bir hata mesajıyla karşılaşmışsanız muhakkak tip dönüşümüyle ilgili yanlış birşeyler yapmışsınız demektir. Veritabanına veri kayıt ederken farklı veri tipleri kullanırsanız bu hatayla karşılaşmanız olasıdır. Ben bu hatayı bir defasında SqlDataSource parametrelerimden birisini String olarak tanımladığımda almıştım. Veritabanındaki veri tipi uniqueidentifier. Daha sonra Object olarak değiştirdim ve sorun çözüldü.

14 Mart 2012 Çarşamba

String was not recognized as a valid DateTime



   Böyle bir hatayla karşılaşmışsanız muhtemelen yanlış formatta bir tarih girmişsiniz demektir. Format dönüşümü ile bu sorunu çözebilirsiniz. Mesela tarih formatları ülkeden ülkeye değişmektedir. Localde çalıştırdınız web sitenizi sunucuda çalıştırdığınızda hata verebilir. Halbuki lokalinizde düzgün çalışmaktadır. Bunun nedeni muhtemelen sql server veya işletim sisteminizin dil ve tarih ayarlarındandır. Bu tip sorunları bir sql fonksiyonu olan convert fonksiyonu ile çözebilirsiniz.

Örneğin : CONVERT (veri tipi, sütun adı veya parametre, format(Örneğin 104)) CONVERT(VARCHAR(10), dogumGunu, 104)

Formatlar :
Yüzyılı              Standart İsmi            Girdi/Çıktı Formatı
0 veya 100         Default                   aa.gg.yyy ss:ddPM
101                       ABD                             aa/gg/yy
102                          ANSI                          yy.aa.gg
103                   İngiliz-Fransız                 gg/aa/yy
104                        Alman                           gg.aa.yy
105                          İtalyan                        gg-aa-yy
111                           ISO                              yyaagg

ExecuteScalar requires an open and available Connection.



ExecuteScalar requires an open and available Connection. The connection's current state is closed.

Yukarıdaki ifadeye benzer bir hata mesajı almışsanız eğer muhtemelen bağlantı cümleciğinizdeki bağlantı ifadesini açmamışsınızdır. Örneğin :
SqlConnection baglanti = new SqlConnection("bağlantı cümlesi");
SqlCommand cmd = new SqlCommand("sql ifadesi", baglanti);
string ad = cmd.ExecuteScaler().ToString();

gibi bir ifade kullanmışsanız yukarıdaki hata mesajıyla karşılaşırsınız. Yapmanız gereken bağlantıyı açmak :


SqlConnection baglanti = new SqlConnection("bağlantı cümlesi");
baglanti.Open();
SqlCommand cmd = new SqlCommand("sql ifadesi", baglanti);
string ad = cmd.ExecuteScaler().ToString();
baglanti.Close();

The ControlToValidate property of 'RequiredFieldValidator1&#



The ControlToValidate property of 'RequiredFieldValidator1' cannot be blank.


Böyle bir hatayla karşılaşmışsanız muhtemelen RequiredFieldValidatorkontrolünün ControlToValidate özelliğine herhangi bir değer atamadığınızdandır. Bu sorunu çözmek için öncelikle RequiredFieldValidator kontrolünüze tıklayın. Ardından Properties penceresindenControlToValidate özelliğini bulun. Bu özellikteki boş alana tıklayınca aşağı doğru bir ok işareti çıkacaktır. Oka tıklayınca kullanabileceğiniz kontrollerin listesi gözükür. Oradan istediğiniz kontrolü seçebilirsiniz.(Genellikle textbox kontrollerinde kullanılır.)

ExecuteReader: Connection property has not been initialized



Eğer buna benzer bir hata ile karşılaşmışsanız muhtemelen Command nesnenize bağlantı cümleciğini eklememişsiniz demektir.

Örneğin :

SqlComman komut = new SqlCommans("select * from musteriler");
SqlReader reader = komut.ExecuteReader();
reader.Read();

Yukarıdaki gibi bir kod yazarsanız "ExecuteReader: Connection property has not been initialized."
hatası ile karşılaşırsınız. Sorunun çözümü basit :

SqlConnection baglanti = new SqlConnection("bağlantı cümlesi");
SqlComman komut = new SqlCommans("select * from musteriler", baglanti);
veya
komut.Connection = baglanti;

Login failed for user hatası (SqlException 0x80131904)



Login failed for user 'XXX_plesk(default)'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Login failed for user 'XXX_plesk(default)'.
SqlException 0x80131904

Yukarıdakine benzer bir hata alıyorsanız connectionstring alanınızı kontrol etmenizi tavsiye ederim. Ben de bu hatayla karşılaştım. Bağlantım cümlemdeki integrated security = true ifadesini kaldırdıktan sonra sorunum çözüldü. http://www.connectionstrings.com/ bu adresten bağlantı cümlelerine göz atabilirsiniz.

FileUpload veya AsyncFileUpload - Access to the path is denied.


Access to the path 'C:\Inetpub\wwwroot\Site\images\resim.jpg' is denied.


   Bir dosyayı sunucuya yüklerken yukarıdaki gibi bir hatayla karşılaştıysanız büyük ihtimalde yüklemek istediğiniz klasöre yazma izni verilmediğinden kaynaklanıyordur. Bu sorunu ilgili klasöre yazma izni vererek çözebilirsiniz. 

   Plesk panelde bunu File Manager alanından yapmanız mümkün. File Manager alanında dosya ve klasörlerin en sağ tarafında sarı renkte bir kilit simgesi gözükür. Farenizi bu simgenin üzerine getirdiğinizde şöyle bir yazı ile karşılaşırsınız : "Change permisions for directory" yani klasör izinlerini değiştirme. Butona tıkladığınızda "Setting up Access Permissions" alanına erişirsiniz. Sol tarafta grup veya kullanıcı adlarını görebilirsiniz. (Groups or user names) Sağ tarafta da seçili olan gruba ait izinler bulunmaktadır. Burada istediğiniz grubu seçebilir ve izinlerini değiştirebilirsiniz. Dosya yüklemek için write iznini verilmesi gerekmektedir. (Write alanında Allow sütunu seçili olmalı.)





İLGİLİ BAĞLANTILAR:


Ajax CascadingDropDown Extender- Method Error 500/12031


Sorun :  Ajax CascadingDropDown  kontrolünü kullanırken "method error 500" gibi bir hata mesajı ile karşılaşıyorum.


  1. Cevap :   [System.Web.Script.Services.ScriptService()] kodunu aşağıdaki alana yapıştırın. Aslında bu kod açıklama olarak büyük ihtimal bulunmaktadır. 

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService()]
public class CascadingDropDown : System.Web.Services.WebService {





    2. Cevap : Büyük - küçük harf duyarlılığı bazen sorunlara neden olabiliyor. Örneğin servis metodunu yazarken  public CascadingDropDownNameValue[] Getil(string knownCategoryValues, string Category)


Category alanını büyük harfle yazarsanız hata mesajını alabilirsiniz. category şeklinde küçük harfle yazılması gerekiyor.


3. Cevap : Eğer asmx uzantılı web servis dosyasını bir başka projeden kopyalayıp veya Add - Existing Item diyerek dahil etmişseniz uygulamanız çalışmayabilir. Tavsiyem ilgili sınıfın sadece içerisini kopyalayın ve projenizde yeni bir web servis dosyası açıp ilgili web servis metodlarını yapıştırın.


4.Cevap : CascadingDropDown  extender en ufak bir hatada çalışmayan bir kontroldür. Bu yüzden de herşeyin kusursuz olması gerekiyor. Özellikle de web servis sayfamızda veritabanı işlemlerine dikkat etmemiz gerekiyor. Veritabanı işlemlerinin doğru bir şekilde çalıştığını muhakkak kontrol ediniz. Denemek amacıyla başka bir sayfayı kullanabilirsiniz.

5. Cevap : Bir konuya daha dikkat etmenizi tavsiye ediyorum. O da servis dosyamız olan asmx uzantılı dosyamızın yolunu gösterdiğimiz ServicePath alanı yerine yanlışlıkla ScriptPath alanını kullanmamaya özen gösterin.

6. Cevap : Eğer Servis metodunuzda contextKey parametresini kullanmışsanız CascadingDropDown   uzantısının(extender) UseContextKey alanının true olması gerekiyor.

Visual Studio Silverlight İntellisense Sorunu


Sorun : Silverlight uygulamalarını visual studio editör programında kullandığımda code-behind tarafında intellisense özelliği ile kontrollere erişemiyorum.

Çözüm : Bir kontrolü xaml kısmına ekledikten sonra derlerseniz(build) intellisense ile kontrollere erişebilirsiniz.

12 Mart 2012 Pazartesi

Ajax CalenderExtender Tarih Formatı Sorunu

   Ajax CalenderExtender kullanıyorsanız tarih formatı ile ilgili bir sorunla karşılaşabilirsiniz. Bu sorun pek çok nedenden kaynaklanabilir. Çözüm yollarından birisi de ToolkitScriptManager ayarlarında gizli. EnableScriptGlobarization ayarını True yaparsanız (varsayılan değeri False) sorununuzu çözebilirsiniz. Tabi başka bir nedenden kaynaklanmıyorsa. Böylece tarih sormatınız ülkenize göre belirlenecektir.

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 


Exception Details: System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)


Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.


Yukarıdaki gibi bir hatayla karşılaşmışsanız eğer sorun veritabanı bağlantısından kaynaklanıyordur muhtemelen. Microsoft SQL Server Management Studio programıyla bağlantı kurmayı denediğinizde de muhtemelen hata alacaksınız. Sorunun neden kaynaklandığını bilmiyorum ama bir çözüm yolu önereceğim :

SQL Server Configuration Manager - SQL Server Services - SQL Server (MSSQLSERVER) sağ tıklayıp start derseniz sorununuz çözülebilir.

11 Mart 2012 Pazar

ConvertEmptyStringToNull ASP.NET SqlDataSource Parameters Çalışmıyor

   Bazen bir uygulama yaptığımızda, uygulamamızın, kullanıcı herhangi bir değer girmediği alanlarda da çalışmasını isteriz. Mesela veritabanından herhangi bir sorgu yaptığımız bir ekranı düşünün. TC Kimlik No değerimizi girdik. Tarih alanı olmasına rağmen o alanı boş bırakabiliriz. Bu durumda sonuçlar sadece TC Kimlik No alanına göre filtrelenecek. Böyle bir uygulamayı GridView, SqlDataSource ve TextBox kullanarak yapmak istiyorsak hatayla karşılaşabiliriz. Daha doğrusu GridView alanında herhangi bir kayıt gözükmeyebilir. Bu sorunun birkaç nedeni olabilir fakat öncelikle sql ifadesinin düzgün bir şekilde çalıştığından emin olun. Eğer SQL ifademiz doğru çalışıyorsa sorunu çözmek için SqlDataSource kontrolünün CancelSelectOnNullParameter özelliğini False (veya duruma göre True da olabilir( varsayılan(default) değeri True))) yapmayı deneyin. 

10 Mart 2012 Cumartesi

SQL - "NULL" ifadelerini Sorgulamak

T-SQL ifadeleri ile "NULL" değerleri sorgulamak istiyorsanız şöyle bir hataya düşebilirsiniz :

SELECT * FROM tblOgrenci 
WHERE Ad = NULL


Yukarıdaki gibi bir ifade büyük ihtimalle size aradığınız değerleri getirmeyecektir.

NULL değerleri IS NULL deyimiyle kullanmamız gerekiyor.

SELECT * FROM tblOgrenci
WHERE Ad IS NULL