C#WPF datagrid没有显示任何内容

时间:2015-11-19 15:56:52

标签: c# wpf list datagrid

我是WPF的新手。我认为我的问题不同于

c# wpf datagrid not showing

WPF datagrid not showing data

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

并非所有元素都已设置,但在我的书中应该不是问题。

因此,从图像中可以看到列已正确设置但未显示任何元素 enter image description here

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

0 个答案:

没有答案