我是WPF的新手。我认为我的问题不同于
Datagrid not showing data in wpf with c#
所以这应该很简单。 我有一个绑定到类的数据网格:
public class PcDmisData
{
...
[Serializable]
public class MyImage
{
public object Image;
public bool IsImageEmbedded;
}
[Serializable]
public class MySoundFile
{
public object SoundFile;
public bool IsSoundEmbedded;
}
[Serializable]
public class PartProgram
{
public PartProgram()
{
ProgramTracefields = new List<KeyValuePair<string, string>>();
ProgramTracefields.Add(new KeyValuePair<string, string>("FIELD1", "Batch"));
ProgramTracefields.Add(new KeyValuePair<string, string>("FIELD2", "S/N"));
ProgramTracefields.Add(new KeyValuePair<string, string>("FIELD3", "Operator"));
}
public string Description { get; set; }
public string Note { get; set; }
public string PartProgramFilename { get; set; }
public List<MyImage> LsImagepath { get; set; }
public MySoundFile SoundFile { get; set;}
public string Barcode { get; set; }
public List<KeyValuePair<string, string>> ProgramTracefields { get; set; } //optional
}
....
关于datagrid的xaml是:
<StackPanel>
<DataGrid x:Name="dgPartProgram" CanUserAddRows="True" CanUserDeleteRows="True"
CanUserResizeColumns="True" GridLinesVisibility="All" FontSize="12"
Background="{x:Null}" BorderBrush="Gainsboro" BorderThickness="5"
AutoGeneratingColumn="Datagrid_AutoGeneratingColumn"
Height="283" Margin="0,0,-0.4,0"/>
</StackPanel>
我通过以下方式更改列标题:
private void Datagrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
String strDatagridName = (sender as DataGrid).Name;
switch (strDatagridName.ToUpper())
{
case "DGPARTPROGRAM":
switch (e.PropertyName.ToUpper())
{
case "DESCRIPTION":
e.Column.Header = Langs.Word(Langs.eWords.Description);
break;
case "NOTE":
e.Column.Header = Langs.Word(Langs.eWords.Notes);
break;
case "PARTPROGRAMFILENAME":
e.Column.Header = Langs.Word(Langs.eWords.PPfilename);
break;
case "LSIMAGEPATH":
e.Column.Header = Langs.Word(Langs.eWords.ImageFilename);
break;
case "SOUNDFILE":
e.Column.Header = Langs.Word(Langs.eWords.SoundFilename);
break;
case "BARCODE":
e.Column.Header = Langs.Word(Langs.eWords.Barcode);
break;
case "PROGRAMTRACEFIELDS":
e.Column.Header = Langs.Word(Langs.eWords.ProgramTracefields);
break;
default:
e.Column.Header = e.PropertyName;
break;
}
break;
}
}
绑定是:
dgPartProgram.ItemsSource = EasyRunData.lstPartPrograms;
然后我通过以下方式将元素添加到列表中:
var newPp = new PcDmisData.PartProgram()
{
Description = nppw.tbDescription.Text,
Note = nppw.tbNote.Text,
PartProgramFilename = nppw.tbFilename.Text,
};
EasyRunData.lstPartPrograms.Add(newPp);
并非所有元素都已设置,但在我的书中应该不是问题。
thanx任何帮助 帕特里克
ADD 我已经从教程
采取(并修改为类似于我的问题)这个类public partial class SimpleDataGridSample : Window
{
TheClass tc = new TheClass();
public SimpleDataGridSample()
{
InitializeComponent();
tc.users1 = new List<User>();
tc.users1.Add(new User() { Id = 1, Name = "A", Birthday = new DateTime(1971, 7, 23) });
tc.users1.Add(new User() { Id = 2, Name = "B", Birthday = new DateTime(1974, 1, 17) });
tc.users1.Add(new User() { Id = 3, Name = "C", Birthday = new DateTime(1991, 9, 2) });
tc.users2 = new List<User>();
tc.users2.Add(new User() { Id = 4, Name = "D", Birthday = new DateTime(1971, 7, 23) });
tc.users2.Add(new User() { Id = 5, Name = "E", Birthday = new DateTime(1974, 1, 17) });
tc.users2.Add(new User() { Id = 6, Name = "F", Birthday = new DateTime(1991, 9, 2) });
}
private void button1_Click(object sender, RoutedEventArgs e)
{
dgSimple.ItemsSource = tc.users1;
}
private void button2_Click(object sender, RoutedEventArgs e)
{
dgSimple.ItemsSource = tc.users2;
}
}
public class TheClass
{
public List<User> users1, users2;
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime Birthday { get; set; }
}
}
简而言之: 1.创建数据网格 2.数据网格后来绑定到源1 3.数据网格后来绑定到源2