设置 RadGridView 数据源时应用 hangs/freezes
Application hangs/freezes when setting RadGridView datasource
我有一个 winforms 应用程序,当我最小化 window 我需要进程仍然 运行。一切正常,直到我设置 RadGrid 数据源:radGrid1.DataSource = datasource1;
当我以这种方式设置数据源时,应用程序就会冻结,什么也不会发生。
经过一番搜索,我将代码修改为:
radGrid1.BeginUpdate();
radGrid1.DataSource = datasource1;
这样我就可以设置数据源,但我的网格丢失了格式。
如果我添加 radGrid1.EndUpdate()
它也会冻结。
我该怎么做才能加载数据源而不丢失我的 radgrid 格式?
此致
To prevent the grid from traversing all data fields in that collection, set the GridViewTemplate.AutoGenerateColumns property to False. In this case, the additional fields that you might use when sorting, grouping, etc., should be included in the MasterGridViewTemplate.Columns collection. With these settings, only the properties that are used as column FieldName properties or those specified in the MasterGridViewTemplate.Columns will be extracted.
应该可以解决您在 "losing the format" 中描述的问题。
第二个问题,程序冻结,这不是我在 windows 表单环境中使用 RadGridViews
的许多场合遇到的问题。
我唯一能想到的是您的数据源集合太大,或者集合中的项目有太多字段,以至于 RadGridView
正在尝试为 AutoGenerateColumns
生成列属性 设置为 true
。
我今天刚刚在使用 Telerik RadGridView 2017.2.613.40 的应用程序中遇到了这个问题。我在代码中定义了列:
_grid.Columns.AddRange(
//...more columns
new GridViewCheckBoxColumn
{
Name = "IsSmallLabel",
FieldName = "IsSmallLabel",
MinWidth = 100,
MaxWidth = 100,
IsVisible = true,
ReadOnly = false,
HeaderText = "Small label"
},
new GridViewCheckBoxColumn
{
Name = "IsTechCard",
FieldName = "IsTechCard",
MinWidth = 100,
MaxWidth = 100,
IsVisible = true,
ReadOnly = false,
HeaderText = "Tech card"
});
还有一个 OnCellFormatting 事件:
private void OnCellFormatting(object sender, CellFormattingEventArgs e)
{
try
{
var checkCell = e.CellElement as GridCheckBoxCellElement;
if (checkCell == null) return;
var poItem = e.Row.DataBoundItem as PurchaseOrderItem;
if (poItem == null) return;
if (string.Equals(e.Column.Name, "IsSmallLabel", StringComparison.OrdinalIgnoreCase))
{
checkCell.Visibility = !string.IsNullOrEmpty(poItem.LotNo) ? ElementVisibility.Visible : ElementVisibility.Collapsed;
checkCell.Value = !string.IsNullOrEmpty(poItem.LotNo);
}
else if (string.Equals(e.Column.Name, "IsTechCard", StringComparison.OrdinalIgnoreCase))
{
checkCell.Visibility = poItem.TechnologyCard != null ? ElementVisibility.Visible : ElementVisibility.Collapsed;
checkCell.Value = poItem.TechnologyCard != null;
}
}
catch (Exception ex)
{
_logger.Error(ex);
}
}
模型中实际上缺少这两个字段,添加它们解决了应用程序挂起的问题。这个问题似乎与格式化功能有关,因为删除它也会阻止应用程序挂起。
我有一个 winforms 应用程序,当我最小化 window 我需要进程仍然 运行。一切正常,直到我设置 RadGrid 数据源:radGrid1.DataSource = datasource1;
当我以这种方式设置数据源时,应用程序就会冻结,什么也不会发生。
经过一番搜索,我将代码修改为:
radGrid1.BeginUpdate();
radGrid1.DataSource = datasource1;
这样我就可以设置数据源,但我的网格丢失了格式。
如果我添加 radGrid1.EndUpdate()
它也会冻结。
我该怎么做才能加载数据源而不丢失我的 radgrid 格式?
此致
To prevent the grid from traversing all data fields in that collection, set the GridViewTemplate.AutoGenerateColumns property to False. In this case, the additional fields that you might use when sorting, grouping, etc., should be included in the MasterGridViewTemplate.Columns collection. With these settings, only the properties that are used as column FieldName properties or those specified in the MasterGridViewTemplate.Columns will be extracted.
应该可以解决您在 "losing the format" 中描述的问题。
第二个问题,程序冻结,这不是我在 windows 表单环境中使用 RadGridViews
的许多场合遇到的问题。
我唯一能想到的是您的数据源集合太大,或者集合中的项目有太多字段,以至于 RadGridView
正在尝试为 AutoGenerateColumns
生成列属性 设置为 true
。
我今天刚刚在使用 Telerik RadGridView 2017.2.613.40 的应用程序中遇到了这个问题。我在代码中定义了列:
_grid.Columns.AddRange(
//...more columns
new GridViewCheckBoxColumn
{
Name = "IsSmallLabel",
FieldName = "IsSmallLabel",
MinWidth = 100,
MaxWidth = 100,
IsVisible = true,
ReadOnly = false,
HeaderText = "Small label"
},
new GridViewCheckBoxColumn
{
Name = "IsTechCard",
FieldName = "IsTechCard",
MinWidth = 100,
MaxWidth = 100,
IsVisible = true,
ReadOnly = false,
HeaderText = "Tech card"
});
还有一个 OnCellFormatting 事件:
private void OnCellFormatting(object sender, CellFormattingEventArgs e)
{
try
{
var checkCell = e.CellElement as GridCheckBoxCellElement;
if (checkCell == null) return;
var poItem = e.Row.DataBoundItem as PurchaseOrderItem;
if (poItem == null) return;
if (string.Equals(e.Column.Name, "IsSmallLabel", StringComparison.OrdinalIgnoreCase))
{
checkCell.Visibility = !string.IsNullOrEmpty(poItem.LotNo) ? ElementVisibility.Visible : ElementVisibility.Collapsed;
checkCell.Value = !string.IsNullOrEmpty(poItem.LotNo);
}
else if (string.Equals(e.Column.Name, "IsTechCard", StringComparison.OrdinalIgnoreCase))
{
checkCell.Visibility = poItem.TechnologyCard != null ? ElementVisibility.Visible : ElementVisibility.Collapsed;
checkCell.Value = poItem.TechnologyCard != null;
}
}
catch (Exception ex)
{
_logger.Error(ex);
}
}
模型中实际上缺少这两个字段,添加它们解决了应用程序挂起的问题。这个问题似乎与格式化功能有关,因为删除它也会阻止应用程序挂起。