在datagrid中显示List <t>的问题?</t>

时间:2011-06-16 15:49:08

标签: c# wpf datagrid

我有一个名为Result的班级,其中有4个字段为id, marks, total, avg。我创建了List类并存储了结果。

现在我想在datagrid中只显示2列。它们是idtotal。我成功显示了id和total,但datagrid显示的是4列而不是2列。列为id, total, id, total

以下是我显示datagrid的代码:

private void Form1_Load(object sender, EventArgs e)
    {
        List<Result> result = new List<Result>();
        PopulateResult();
        dgresult.AutoGenerateColumns = false;
        dgresult.Items.Clear();
        dgresult.ItemsSource = result;
        DataGridTextColumn col1 = new DataGridTextColumn();
        col1.Header = "Id";
        col1.Binding = new Binding("Id");
        DataGridTextColumn col2 = new DataGridTextColumn();
        col2.Header = "Total";
        col2.Binding = new Binding("Total");
        dgresult.Columns.Add(col1);
        dgresult.Columns.Add(col2);
    }
}
class Result
{
    int id;
    int total;
    int marks;
    int avg;

    public int Id { get { return id; } set { id = value; } }
    public int Total { get { return total; } set { total = value; } }
    public int Marks { get { return marks; } set { marks = value; } }
    public int Avg { get { return avg; } set { avg = value; } }

    public Result(int ID, int TOTAL, int MARKS, int AVG)
    {
        id = ID;
        total = TOTAL;
        marks = MARKS;
        avg = AVG;
    }
}

我不明白为什么会这样。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我在您的代码中添加了一些注释,显示了我的想法:

private void Form1_Load(object sender, EventArgs e)
{
    // Make a new list of result class objects, local to the Form1_Load method:
    List<Result> result = new List<Result>();

    // Call a method that populates a list... wait, what list?
    PopulateResult();

    dgresult.AutoGenerateColumns = false;
    dgresult.Items.Clear();

    // Set the datagrid data source to the list created earlier
    dgresult.ItemsSource = result;
    // ...

在您指定并仅添加两列后,我不确定为什么datagrid具有重复的列集。这将有助于查看方法PopulateResult()

PopulateResult()添加到的列表必须是其他列表,因为在Form1_Load中创建的列表在本地范围内。

我不确定这是否只是一点疏忽,或者您是否需要了解变量范围。如果您已经知道,请原谅我: