我在数据网格上遇到了绑定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”时,我可以保存更改。
提前致谢。
答案 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;。我希望这个解决方案也可以帮助别人。