none
Linq ile 1.Combobox ValueMember'ı ile 2.Combobox'ı Filtreleme RRS feed

  • Soru

  • Merhaba, 2 adet combobox'ım mevcut ve tablolarımı linq ile bağladım. 1.combobox üzerinden bölge seçildikten sonra 2.combobox'ta sadece o bölge id'sine ait departmanların gelmesini istiyorum. Çünkü farklı bölgelerde aynı departmanlar mevcut.

    Şu anda kodlarım böyle. Uygulama derleniyor ama çalışma zamanı hatası alıyorum.

            private void cb_Bolge_MouseHover(object sender, EventArgs e)
            {
                cb_Bolge.DataSource = k.tbl_Bolges;
                cb_Bolge.DisplayMember = "Bolge_Ad";
                cb_Bolge.ValueMember = "Bolge_ID";
            }
    
            private void cb_Bolge_ValueMemberChanged(object sender, EventArgs e)
            {
                cb_Departman.DataSource = k.tbl_Departmans.Where(p=>p.Bolge_ID == Convert.ToInt32(cb_Bolge.ValueMember));
                cb_Departman.DisplayMember = "Departman_Ad";
                cb_Departman.ValueMember = "Departman_ID";
            }

    Gelen Hata

    System.FormatException was unhandled by user code
      HResult=-2146233033
      Message=Giriş dizesi doğru biçimde değildi.
      Source=System.Data.Linq
      StackTrace:
           konum: System.Data.Linq.SqlClient.QueryConverter.VisitInvocation(InvocationExpression invoke)
           konum: System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
           konum: System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
           konum: System.Data.Linq.SqlClient.QueryConverter.VisitBinary(BinaryExpression b)
           konum: System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
           konum: System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
           konum: System.Data.Linq.SqlClient.QueryConverter.VisitWhere(Expression sequence, LambdaExpression predicate)
           konum: System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
           konum: System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
           konum: System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
           konum: System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(Expression node)
           konum: System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations)
           konum: System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
           konum: System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
           konum: System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
           konum: System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
           konum: System.Data.Linq.Provider.BindingList.Create[T](DataContext context, IEnumerable`1 sequence)
           konum: System.Data.Linq.DataQuery`1.GetNewBindingList()
           konum: System.Data.Linq.DataQuery`1.System.ComponentModel.IListSource.GetList()
           konum: System.Windows.Forms.CurrencyManager.SetDataSource(Object dataSource)
           konum: System.Windows.Forms.CurrencyManager..ctor(Object dataSource)
           konum: System.Windows.Forms.BindingContext.EnsureListManager(Object dataSource, String dataMember)
           konum: System.Windows.Forms.ListControl.SetDataConnection(Object newDataSource, BindingMemberInfo newDisplayMember, Boolean force)
           konum: System.Windows.Forms.ListControl.set_ValueMember(String value)
           konum: TYH_Envanter.Envanter_Ekle.cb_Bolge_SelectedIndexChanged(Object sender, EventArgs e) c:\Users\Arda\Documents\Visual Studio 2013\Projects\TYH Envanter\TYH Envanter\Envanter_Ekle.cs içinde: satır 59
           konum: System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
           konum: System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
           konum: System.Windows.Forms.ComboBox.RefreshItems()
           konum: System.Windows.Forms.ComboBox.OnDataSourceChanged(EventArgs e)
           konum: System.Windows.Forms.ListControl.SetDataConnection(Object newDataSource, BindingMemberInfo newDisplayMember, Boolean force)
           konum: System.Windows.Forms.ListControl.set_DataSource(Object value)
      InnerException: 
    
    


    15 Temmuz 2015 Çarşamba 06:54

Yanıtlar

  • Çözüldü;

    private void cb_Bolge_ValueMemberChanged(object sender, EventArgs e)
    {
       int blogId=Convert.ToInt32(cb_Bolge.SelectedValue);
       cb_Departman.DataSource = k.tbl_Departmans.Where(p=>p.Bolge_ID == blogId);
       cb_Departman.DisplayMember = "Departman_Ad";
       cb_Departman.ValueMember = "Departman_ID";
    }

    • Yanıt Olarak İşaretleyen Arda Iskender 15 Temmuz 2015 Çarşamba 10:58
    15 Temmuz 2015 Çarşamba 10:58

Tüm Yanıtlar

  • Aşağıdaki gibi deneyebilir misiniz?
    var bolge=Convert.ToInt32(cb_Bolge.ValueMember);
    cb_Departman.DataSource = k.tbl_Departmans.Where(p=>p.Bolge_ID == bolge);
                cb_Departman.DisplayMember = "Departman_Ad";
                cb_Departman.ValueMember = "Departman_ID";


    Mail Blog Web Site

    15 Temmuz 2015 Çarşamba 07:07
  • Malesef bu seferde var bolge satırını hata olarak gösterdi.
    15 Temmuz 2015 Çarşamba 07:17
  • var bolge=Convert.ToInt32(cb_Bolge.ValueMember);
    cb_Departman.DataSource = k.tbl_Departmans.Where(p=>p.Bolge_ID == bolge).ToList();
                cb_Departman.DisplayMember = "Departman_Ad";
                cb_Departman.ValueMember = "Departman_ID";
    Sonuna ToList() yap bakalım.

    Mail Blog Web Site

    15 Temmuz 2015 Çarşamba 07:51
  • Maalesef buda olmadı.
    15 Temmuz 2015 Çarşamba 08:07
  • Şimdi dikkatimi çekti. Sen bunu neden bu eventlerde dolduruyorsun? Hover nedir?

    Mail Blog Web Site

    15 Temmuz 2015 Çarşamba 08:41
  • 2 tane ComboBox var birinciden bölge tablosundan bölgeyi çekecek ondan sonra 2.ComboBoxta verileri seçilen bölgeye göre getirsin istiyorum. Başka türlü nasıl olabileceği hakkında bilgim yok.
    15 Temmuz 2015 Çarşamba 08:49
  • BindingSource kullanmalısınız.

    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    15 Temmuz 2015 Çarşamba 10:00
    Moderatör
  • "Bolge_id" integer'a cevirilemeyen bir deger. Sanirim demek istediginiz aslinda tblBolge_Ids.Bolge_id degeri.

    Kullandigniz yer de hatali. Hover yerine SelectedIndexChanged kullanin. Basitce su sekilde:

    var bolge = ((ComboBox)sender).SelectedItem as tbl_Bolge;
    
    if (bolge != null)
    {
       var departmanlar = bolge.Departmans.ToList();
       cb_Departman.DataSource = departmanlar;
       cb_Departman.DisplayMember = "Bolge_Ad";
       cb_Departman.ValueMember = "Departman_ID"; // gerekli degil
    }

    Not: Property adlarini tahmin ile yazdim. bolge.Departmans yerine bolge.Departmanlar olabilir, blemiyorum model sende.

    15 Temmuz 2015 Çarşamba 10:13
    Yanıtlayıcı
  • Çözüldü;

    private void cb_Bolge_ValueMemberChanged(object sender, EventArgs e)
    {
       int blogId=Convert.ToInt32(cb_Bolge.SelectedValue);
       cb_Departman.DataSource = k.tbl_Departmans.Where(p=>p.Bolge_ID == blogId);
       cb_Departman.DisplayMember = "Departman_Ad";
       cb_Departman.ValueMember = "Departman_ID";
    }

    • Yanıt Olarak İşaretleyen Arda Iskender 15 Temmuz 2015 Çarşamba 10:58
    15 Temmuz 2015 Çarşamba 10:58
  • :) Bu da bir yol tabii.

    Ben olsam dogrudan gosterdigim gibi bolge uzerinden alirdim, bolge.Departmanlar gibi. 

    15 Temmuz 2015 Çarşamba 13:27
    Yanıtlayıcı