从1个表中绑定DataGridComboBoxColumn,从另一个表中选择值

时间:2015-02-12 10:04:18

标签: c# wpf binding datagrid datagridcomboboxcolumn

我在数据网格上遇到了绑定DataGridComboBoxColumn的问题。简单地说,我想要做的是,我在datagrid上有3行,第一个(DataGridTextColumn)显示Table1中的GrupName,第二个(DataGridComboBoxColumn)显示来自Table2的PrinterNames但是从Table1中选择的值(PrinterID),第三个(DataGridComboBoxColumn)显示TaxRates从表3中,从表1中选择值

所以datagrid会显示像;

  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

打印机名称和税率将成为DataGridComboBoxColumn。我计划使用ObservableCollection,所以当用户通过从DataGridComboBoxColumn中选择更改“Pizza”的“Printer”时,我可以保存更改。

提前致谢。

1 个答案:

答案 0 :(得分:1)

在我尝试了几件事后,我使用了以下解决方案,它对我有用,但我不知道它有多专业。这是我的解决方案;

我的XAML代码是

<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代码

    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类代码是;

  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;
    }

}

我的另一个名为Vergi的课程就像这样;

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;
        }

    }

我厌倦了做的是使用DataGridComboBoxColumn显示&#34; Vergi&#34;来自db表名为&#34; Vergi&#34;然而选择&#34; Vergi&#34;来自另一个表格的值是&#34; UrunGrubu&#34;。我希望这个解决方案也可以帮助别人。