logo


Welcome Guest! To enable all features please Giriş or Kayıt.

Bildirim

Icon
Error

Ayarlar
Son mesaja git Go to first unread
bilgehanyildiz  
#1 Gönderildi : 25 Şubat 2015 Çarşamba 10:28:29(UTC)
bilgehanyildiz

Sıralama: Member

Gruplar: Registered
Katılan: 25.02.2015(UTC)
Mesajlar: 12
Turkey
Konum: İstanbul

2 Mesajına Toplam 2 Kere Teşekkür Edildi.
Generic formlar yaparken designerın hata verdiğini ilk yazımda da belirtmiştim

Ancak haliyle bizim türettiğimiz formda da eklemeler vs yapabilmemiz için designerı

değiştirmemiz gerekiyor

Generic Formlarda designerı kullanmak için öncelikle bir ara form yaratıyoruz

Projemize birtane BaseTypeControl diye basetypeformdan türeyecek basit bir form atalım

Kod:

public partial class BaseTypeControl : BaseTypeForm<BaseTypeEntity>
    {
        public BaseTypeControl()
        {
            InitializeComponent();
        }
    }




Formlarımızı kullanabilmemiz için BaseTypeForma artık Gerçek formlarımızdan direkt bağlantı olmayacak ve formlarımız BaseTypeControl formundan türeyecek şekilde ayarlayacağız.Ancak bunu yapmadan önce BaseTypeFormdaki kodlarımızda biraz değişiklik yapmamız gerekmektedir.

BaseTypeFormumuza öncelikle bir tane property ekliyoruz.Dikkat edileceği gibi bu property Tentity tipini alan ve virtual olarak tanımlanan bir property nedeni ise bunu diğer formlardan çağırırken override etmemiz gerekeceği için


Kod:

public virtual Type CurrentEntityType
        {
            get
            {
                Type entityType = typeof(TEntity);
                if (entityType == typeof(BaseTypeEntity)) return null;
                return entityType;
            }
        }





Kodumuzda İse yukarıdaki yeri ekledikten sonra tek değiştirmemiz gereken yer typename direkt Tentity okuması yerine CurrentEntityTypeın adını alacak şekilde değiştirmemiz

Kod:

        string typename = CurrentEntityType.Name;
           // string typename = typeof(TEntity).Name;









//BaseTypeFormun son hali
public partial class BaseTypeForm<TEntity> : Form where TEntity : BaseTypeEntity
    {
        public BaseTypeForm()
        {
            InitializeComponent();
        }

        public virtual Type CurrentEntityType
        {
            get
            {
                Type entityType = typeof(TEntity);
                if (entityType == typeof(BaseTypeEntity)) return null;
                return entityType;
            }
        }

        private void BaseTypeForm_Load(object sender, EventArgs e)
        {

            FillGrid();
        }

        public void FillGrid() 
        {
        SqlConnection conn=new SqlConnection(ConfigurationManager.ConnectionStrings["TelefonRehberiConnectionString"].ConnectionString);

        string typename = CurrentEntityType.Name;
           // string typename = typeof(TEntity).Name;
        string sorgu = "Select * from "+typename;
        SqlDataAdapter adap = new SqlDataAdapter(sorgu,conn);
        DataTable dt = new DataTable();
        adap.Fill(dt);
        dataGridView1.DataSource = dt;
        }

        private void btnEkle_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["TelefonRehberiConnectionString"].ConnectionString);
            string typename = CurrentEntityType.Name;
            // string typename = typeof(TEntity).Name;
            string sorgu = "insert into " +typename + " values(@Name)";
            SqlCommand cmd = new SqlCommand(sorgu, conn);
            cmd.Parameters.Add("@Name", txtName.Text);
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
            FillGrid();
           
        }

        public virtual void btnShowMessage_Click(object sender, EventArgs e)
        {
            MessageBox.Show("BaseFormdur");}}





BaseFormumuzda bunları yaptıktan sonra Projemize UserTypeForm2 diye yeni bir form ekliyoruz ve aşağıdaki şekilde kodlarını yazıyoruz.Görüldüğü gibi son eklediğimiz form artık BaseTypeControlden türeyen ve CurrentEntityType override ederek ilgili sınıfı gönderdiğimiz hale getirdik

Kod:

public partial class UserTypeForm2 : BaseTypeControl
    {
        public UserTypeForm2()
        {
            InitializeComponent();
        }

        public override Type CurrentEntityType
        {
            get
            {
                return typeof(UserType);
            }
        }
    
    }




İlk makaleyi yaptığınız formdan kalma ise bu değişiklikleri yapsanız bile designer hala hata veriyor olabilir.Bunun için ise yapmanız gereken projenizi kapattıktan sonra projenizin bin ve obj klasörlerini silip projeyi tekrar rebuild yapmanızdır.Ondan sonra formumuzu açtığımız zaman designerıda kullanabiliyoruz

UserPostedImage
thanks bilgehanyildiz: 1 Kişi mesajın için Teşekkür Etti.
ksk66 29.06.2015(UTC) tarihinde


Bu konudaki kullanıcılar
Guest
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.