【发布时间】:2015-08-03 22:40:05
【问题描述】:
我正在使用 EF 6 在 WPF DataGrid 中显示数据。数据似乎没有问题。但我调用 FormatGrid 函数来执行诸如用网格标题中的空格替换字段名称中的下划线之类的事情。我第一次运行查询它不起作用。它在 DataGrid 中找不到任何列。但在那之后,当我第二次运行查询时,它会找到我想要的列和格式。我尝试将 LazyLoadingEnabled 设置为 false。我试过在查询结果上调用 Count() 。在第一次通话期间,没有任何内容会填充查询。有什么方法可以强制在 EF 查询中加载列,还是应该在网格中使用以后的事件来格式化数据?
private void LoadStores()
{
dgvStores.ItemsSource = null;
using (var oContext = new FiduciaEntities())
{
oContext.Configuration.LazyLoadingEnabled = false;
var oQuery = from sd in oContext.StoreDefs
where sd.franchise == false
orderby sd.store_no
select new
{
Store_No = sd.store_no,
Store_Name = sd.store_name,
County = c.County1,
_StoreID = sd.id
};
dgvStores.ItemsSource = oQuery.ToList();
dgvStores.SelectedValuePath = "_StoreID";
int iCount = oQuery.Count();
FormatGrid(ref dgvStores);
}
}
private void FormatGrid(ref DataGrid oDataGrid)
{
foreach (DataGridColumn oColumn in oDataGrid.Columns)
{
string sHeader = oColumn.Header.ToString();
if (sHeader.Length > 0)
{
if (sHeader.Substring(0, 1) == "_")
{
oColumn.Visibility = System.Windows.Visibility.Hidden;
oColumn.Header = oColumn.Header.ToString().Replace("_", "");
}
}
oColumn.Header = oColumn.Header.ToString().Replace("_", " ");
}
}
【问题讨论】:
-
我在 MSDN 上找到了这个页面,它描述了 EF 中的延迟执行:msdn.microsoft.com/en-us/library/vstudio/…。它说当我调用 ToList() 时应该填充查询。我猜问题在于DataGrid。我将 AutoGenerateColumns 设置为 true,但第一次加载网格时它不会自动生成列。我不知道为什么。似乎是因为它位于不同的选项卡中。当我在选项卡上放置一个按钮并从那里运行查询时,它第一次正确加载。这个问题可能没有解决办法。
标签: c# wpf entity-framework datagrid