DataGridView列不会显示已设置的值。它们在GUI中显示为空白

时间:2017-08-03 18:42:41

标签: c# windows winforms datagridview entity-framework-6

我的最终目标是替换拉出表的外键ID以获取人名。任何帮助都会很棒。我使用EF6上下文DbSet作为DataGridView的绑定源。

它拉动了整个表格,虽然它对GUI来说不够干净。所以我最终删除了Id列和其他人。然后我添加一个名为Person Name的新列。

从字面上看,一切都很完美,我需要它。它只是没有在DGV单元格中显示人名的值。

using (var ctx = new myDbContext())
{ 
    BindingSource bSrc = new BindingSource();
    bSrc.DataSource = ctx.myDbSet.ToList();
    myDataGridView.DataSource = bSrc;
    myDataGridView.Refresh();
}
myDataGridView.Columns.Add("originalPerson", "Person Name");

myDataGridView.AutoGenerateColumns = false;

myDataGridView.Columns.Remove("Id");
myDataGridView.Columns.Remove("DateModified");
myDataGridView.Columns.Remove("DateCreated");

using (var ctx = new myDbContext())
{
    foreach (DataGridViewRow r in myDataGridView.Rows)
    {

        int pId= (Int32)r.Cells[0].Value;
        string name = ctx.personsTable.FirstOrDefault(p => p.Id == pId).name;
//Where I set the values.
        r.Cells[myDataGridView.Columns.Count - 1].Value = name.ToUpper();
    }
}

myDataGridView.Columns.Remove("personsTableId");

if (myDataGridView!= null)
{
    myDataGridView.Columns[myDataGridView.ColumnCount - 1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}

如果有人认为我应该采取另一种方式,我全都耳朵,我觉得这很快乱。提前致谢!我继续前进,展示了我所拥有的一切。

1 个答案:

答案 0 :(得分:0)

我昨天回答了类似的问题,我会为你提出同样的解决方案:

Binding a value from a parent table into a DataGridView's text box using the foreign key

另外 - 我建议隐藏它们Visible = false,而不是删除你不想要的列。这样,如果需要,您可以稍后引用这些值/列。