none
Tablolar Arası Bağlantı RRS feed

  • Soru

  • merhabalar,

    benim iki tane tablom var ikisinde de ortak değer alan müşteri no kolonum var, ilk formumda gridcontrol üzerinde müşteri adına çift tıklanıldığında diğer form açılarak diğer formun içinde ki gridcontrol de sadece o müşterinin bilgileri gözüksün istiyorum inner joinle yapıyorum olmuyor bütün verileri getiriyor. yardımcı olursanız acil sevinirim herkese iyi çalışmalar...

    27 Temmuz 2016 Çarşamba 09:46

Tüm Yanıtlar

  • Cok ucu acik bir soru sormussun. Sorunun amaci belli degil ve gercekten bu bir SQL sorusu mu, yoksa "anadosya-detay" arayuz nasil yaparim gibi bir soru mu?

    Eger SQL sorusu soruyorsan, ilk tablodan musteriNo degeri aldigina gore ikinciden sadece bu musteriNo'ya uyan kayitlari alacaksin, ortada join gerektiren bir durum yok. Ornegin:

    declare @id int = 15; -- ilk tablodan alinan musteriNo 15 diyelim
    
    -- ikinci tablodan musterinin kayitlarini al
    select * from ikinciTablo where musteriNo = @id;
     

    Form dedigine gore isin icinde arayuz var ama ne oldugu belli degil, ornegin Windows Forms oldugunu kabul edelim. Entity Framework kullanarak soyle bir kodla istedigini elde edebilirsin (System.ComponentModel.DataAnnotations
    System.ComponentModel.DataAnnotations.Schema
    System.Data.Entity
    System.Windows.Forms ... namespacelerini ekledigini var sayarsak, Northwind ornek database ile):

    string defaultConString = @"server=.\SQLExpress;Database=Northwind;Trusted_Connection=yes;";
    
    void Main()
    {
      var ctx = new MyContext(defaultConString);
      var musteriler = ctx.Customers;
    
    	Form f = new Form();
    	var dgv = new DataGridView {Dock=DockStyle.Fill, ReadOnly=true, DataSource=musteriler.ToList()};
    	f.Controls.Add( dgv );
    	f.Show();
    	dgv.CellDoubleClick += (sender, args) => {
    	   var musteriId = (string)dgv.CurrentRow.Cells[0].Value;
    
    		var musteri = ctx.Customers.SingleOrDefault(c => c.CustomerId == musteriId);
    		if (musteri != null)
    		{
    			var frmMusteriSiparisleri = new Form { Text = string.Format("[{0}] - Siparisler", musteriId) };
    			var dgvSiparisler = new DataGridView { Dock = DockStyle.Fill, ReadOnly=true, DataSource=musteri.Orders.ToList()};
    			frmMusteriSiparisleri.Controls.Add( dgvSiparisler );
    			frmMusteriSiparisleri.ShowDialog();
    		}
    	};
    }
    
    
    public class MyContext : DbContext
    {
      public MyContext(string connectionString)
         : base(connectionString)
      { }
      public DbSet<Customer> Customers { get; set; }
      public DbSet<Order> Orders { get; set; }
      public DbSet<OrderDetail> OrderDetails { get; set; }
      public DbSet<Product> Products { get; set; }
    }
    
    
    
    public class Customer
    {
      [Key]
      public string CustomerId { get; set; }
      public string CompanyName { get; set; }
      public string ContactName { get; set; }
      // ...
      public virtual List<Order> Orders { get; set; }
    }
    
    public class Order
    {
    	[Key]
    	public int OrderId { get; set; }
    	public string CustomerId { get; set; }
    	public DateTime OrderDate { get; set; }
    	public DateTime? ShippedDate { get; set; }
    	[ForeignKey("CustomerId")]
    	public Customer Customer { get; set; }
    	public virtual List<OrderDetail> OrderDetails { get; set; }
    }
    
    [Table("Order Details")]
    public class OrderDetail
    {
    	[Key]
    	[Column(Order = 1)]
    	public int OrderId { get; set; }
    	[Key]
    	[Column(Order = 2)]
    	public int ProductId { get; set; }
    	public decimal UnitPrice { get; set; }
    	public Int16 Quantity { get; set; }
    	[ForeignKey("ProductId")]
    	public Product Product { get; set; }
    	[ForeignKey("OrderId")]
    	public Order Order { get; set; }
    }
    
    public class Product
    {
    	public int ProductId { get; set; }
    	public string ProductName { get; set; }
    	// ...
    }
    

    Aynen dedigin gibi olur. Birinci formdali gridde musteriler listelenir, cift tiklayinca ikinci bir formda o musterinin siparisleri listelenir.

    27 Temmuz 2016 Çarşamba 10:30