I am stuck with binding DataGridComboBoxColumn on datagrid. Briefly what I am trying to do, I have 3 rows on datagrid, 1st one (DataGridTextColumn) shows GrupName from Table1, 2nd one (DataGridComboBoxColumn) shows PrinterNames from Table2 however selected value (PrinterID) from Table1, 3rd one (DataGridComboBoxColumn) shows TaxRates from Table3, selected value from Table1
so datagrid will show like;
Group Name Printer Name Tax Rate
--------------------------------------------
Pizza Pizza Printer 8
Salad Salad Printer 8
Beverage No Printer 8
Table 1 Table 2 Table3
-------- --------------- ----------
id id id
GroupName PrinterName TaxRate
PrinterID
TaxID
Printer Name and Tax Rate going to be a DataGridComboBoxColumn. I planning to use ObservableCollection so when user change the "Printer" for "Pizza" by choosing from DataGridComboBoxColumn I am able to save changes.
Thanks in advance.
After I tried couple things, I used following solution and it worked for me, however I do not know how professional is it. Here is my solution;
My XAML Code is
<DataGrid AutoGenerateColumns="False" Name="urunGrublariGrid" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Grup Adi" Binding="{Binding Path=grup_adi}"></DataGridTextColumn>
<DataGridComboBoxColumn Header="Yazici" Width="100" x:Name="yazicilar" DisplayMemberPath="adi" SelectedItemBinding="{Binding yazici_listesi}"
SelectedValueBinding="{Binding yazici_id}" SelectedValuePath="id"></DataGridComboBoxColumn>
<DataGridComboBoxColumn Header="Vergi Dilimi" Width="100" x:Name="vergiler" DisplayMemberPath="vergi_orani" SelectedItemBinding="{Binding yazici_listesi}"
SelectedValueBinding="{Binding vergi_id}" SelectedValuePath="id"></DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
XAML.Cs Code
public partial class UrunIslem : Window
{
public static ObservableCollection<UrunGrubu> urun_grubu_listesi { get; set; }
public static ObservableCollection<Yazici> yazici_listesi { get; set; }
public static ObservableCollection<Vergi> vergi_listesi { get; set; }
public UrunIslem()
{
InitializeComponent();
Urun_Grubu_Islemleri();
}
private void Urun_Grubu_Islemleri()
{
UrunGrubu ug = UrunGrubu.tum_gruplar();
urun_grubu_listesi = new ObservableCollection<UrunGrubu>(UrunGrubu.urun_gruplari());
urun_grubu_listesi.Add(new UrunGrubu { grup_adi = ug.grup_adi, yazici_id= ug.yazici_id, urun_turu_id= ug.urun_turu_id, vergi_id = ug.vergi_id });
Yazici yzc = Yazici.yazicilar();
yazici_listesi = new ObservableCollection<Yazici>(Yazici.tum_yazicilar());
yazici_listesi.Add(new Yazici { adi = yzc.adi, id = yzc.id});
Vergi vrg = Vergi.tum_vergileri_getir();
vergi_listesi = new ObservableCollection<Vergi>(Vergi.tum_vergiler());
vergi_listesi.Add(new Vergi { id = vrg.id, vergi_orani = vrg.vergi_orani });
urunGrublariGrid.ItemsSource = urun_grubu_listesi;
yazicilar.ItemsSource = yazici_listesi;
vergiler.ItemsSource = vergi_listesi;
}
}
UrunGrubu Class code is;
public class UrunGrubu
{
public int id { get; set; }
public string grup_adi { get; set; }
public int yazici_id { get; set; }
public int urun_turu_id { get; set; }
public int resim_id { get; set; }
public int vergi_id { get; set; }
public bool etkin { get; set; }
public DateTime ekleme_tarihi { get; set; }
public static UrunGrubu tum_gruplar()
{
UrunGrubu grup = new UrunGrubu();
try
{
SqlCommand cmd = new SqlCommand("SELECT * FROM UrunGrubu WHERE etkin = 1", Genel.baglan());
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
grup.id = Convert.ToInt32(rdr["id"]);
grup.grup_adi = rdr["grup_adi"].ToString();
grup.yazici_id = Convert.ToInt32(rdr["yazici_id"]);
grup.urun_turu_id = Convert.ToInt32(rdr["urun_turu_id"]);
grup.resim_id = Convert.ToInt32(rdr["resim_id"]);
grup.vergi_id = Convert.ToInt32(rdr["vergi_id"]);
grup.etkin = Convert.ToBoolean(rdr["etkin"]);
grup.ekleme_tarihi = Convert.ToDateTime(rdr["ekleme_tarihi"]);
}
}
catch (Exception ex)
{
Genel.log("Tum Urun Gruplarini Getir Fonkisyonu", ex.Message);
throw;
}
return grup;
}
public static List<UrunGrubu> urun_gruplari()
{
List<UrunGrubu> urun_grub_listesi = new List<UrunGrubu>();
try
{
SqlCommand cmd = new SqlCommand("SELECT * FROM UrunGrubu WHERE etkin = 1", Genel.baglan());
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
UrunGrubu eleman = new UrunGrubu();
eleman.id = Convert.ToInt32(rdr["id"]);
eleman.grup_adi = Convert.ToString(rdr["grup_adi"]);
eleman.yazici_id = Convert.ToInt32(rdr["yazici_id"]);
eleman.urun_turu_id = Convert.ToInt32(rdr["urun_turu_id"]);
eleman.resim_id = Convert.ToInt32(rdr["resim_id"]);
eleman.vergi_id = Convert.ToInt32(rdr["vergi_id"]);
eleman.ekleme_tarihi = Convert.ToDateTime(rdr["ekleme_tarihi"]);
urun_grub_listesi.Add(eleman);
}
}
catch (Exception ex)
{
Genel.log("Urun Grubu Getir", ex.Message);
throw;
}
return urun_grub_listesi;
}
}
And one of my other class called Vergi like this;
public class Vergi
{
public int id { get; set; }
public int vergi_orani {get; set;}
public bool etkin {get; set;}
public DateTime ekleme_tarihi {get;set;}
public static Vergi tum_vergileri_getir()
{
Vergi vergiler = new Vergi();
try
{
SqlCommand cmd = new SqlCommand("SELECT * FROM Vergi WHERE etkin = 1", Genel.baglan());
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
vergiler.id = Convert.ToInt32(rdr["id"]);
vergiler.vergi_orani = Convert.ToInt32(rdr["vergi_orani"]);
vergiler.etkin = Convert.ToBoolean(rdr["etkin"]);
vergiler.ekleme_tarihi = Convert.ToDateTime(rdr["ekleme_tarihi"]);
}
}
catch (Exception ex)
{
Genel.log("Tum vergileri getir", ex.Message);
throw;
}
return vergiler;
}
public static List<Vergi> tum_vergiler()
{
List<Vergi> vergiler = new List<Vergi>();
try
{
SqlCommand cmd = new SqlCommand("SELECT * FROM Vergi WHERE etkin = 1", Genel.baglan());
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Vergi vrg = new Vergi();
vrg.id = Convert.ToInt32(rdr["id"]);
vrg.vergi_orani = Convert.ToInt32(rdr["vergi_orani"]);
vrg.etkin = Convert.ToBoolean(rdr["etkin"]);
vrg.ekleme_tarihi = Convert.ToDateTime(rdr["ekleme_tarihi"]);
vergiler.Add(vrg);
}
}
catch (Exception ex)
{
Genel.log("Tum vergiler listesi", ex.Message);
throw;
}
return vergiler;
}
}
What I have tired to do is use DataGridComboBoxColumn that shows a list of "Vergi" from db table called "Vergi" however selected "Vergi" value from another table which is "UrunGrubu". I hope this solution could help someone else too.