如何给C1DataGrid设置“暂无数据”?
Alice,当一个C1DataGrid列表搜索数据但无匹配结果时,如何像下面这样在C1DataGrid列表体里面给个“暂无数据”提示?(这个问题很急,能不能马上帮忙看下?谢谢)回复 1楼CanYou1的帖子
谢谢提供的图片。
很抱歉C1DataGrid无法支持添加一个无绑定的行展示数据。 回复 2楼Alice的帖子
我正在尝试你们提供的Custom Rows功能,是不是可以从这里找到突破口?这个PDF解说有点简单了,弄得我去里雾里的,麻烦你也帮忙看看,是不是可以这样去做?
回复 3楼CanYou1的帖子
根据我的理解,它不能实现你的需求。
CustomRows可以对你的行的样式做自定义:包含创建的行,新行以及分组行等。
根据你1楼提到的,你在过滤后c1dataGrid是没有数据的,CustomRows是对数据进行展示的。
CustomRows的功能可以参考随机安装示例:
\Documents\ComponentOne Samples\WPF\C1.WPF.DataGrid\CS\DataGridSamples\Advanced\CustomRows 回复 4楼Alice的帖子
CustomRows不行,那有没有什么别的办法能 实现我的需求呢?毕竟需求是很合理的啊 回复 5楼CanYou1的帖子
你的需求是在数据绑定的时候添加非绑定的数据,因此C1DataGrid无法实现。
你添加的这个字段无法存到数据源的字段做对应。
有一个简单的但和C1DataGrid没有关系的方法,添加一个text控件展示文字,根据你过滤的情况,将这个控件隐藏或是展示出来。 回复 6楼Alice的帖子
没有数据这个简单啊,我可以在没数据时,造一条假数据,把其中一个字段值设成“暂无数据”就行。关键是如何把它展示到DataGrid里面。 回复 6楼Alice的帖子
我试着用如下代码加在TopRows里面:
Loaded += delegate
{
DataGrid.TopRows.Add(new DataGridTemplateRow() { RowTemplate = (DataTemplate)Resources["TemplateRow"] });
};
然后TemplateRow设成如下:
<DataTemplate x:Key="TemplateRow">
<Label Content="暂无数据" Style="{StaticResource Grid-Label}" Foreground="Red"/>
</DataTemplate>
模仿你们C1案例写的一个自定义行:
public class DataGridTemplateRow : DataGridRow
{
protected override void OnLoaded()
{
base.OnLoaded();
IsEditable = false;
}
protected override object GetRowPresenterRecyclingKey()
{
return typeof(DataGridTemplateRowPresenter);
}
protected override DataGridRowPresenter CreateRowPresenter()
{
return new DataGridTemplateRowPresenter() { Content = RowTemplate.LoadContent() };
}
protected override void BindRowPresenter(DataGridRowPresenter presenter)
{
presenter.DataContext = DataItem;
}
protected override bool HasCellPresenter(DataGridColumn column)
{
return false;
}
public DataTemplate RowTemplate { get; set; }
private static Style rowStyle = null;
}
已经能给列表加上一个自定义行,效果如下,只是文字“暂无数据”不显示,不知为何?
回复 8楼CanYou1的帖子
根据你的提示,利用随机安装示例做了测试,测试结果如下:
灰色区域的文字是利用TopRows添加进去的。
随机安装示例路径:
\Documents\ComponentOne Samples\WPF\C1.WPF.DataGrid\CS\DataGridSamples\Advanced\CustomRows
对该示例修改如下:
1.在CustomRowsPage.xaml文件的<ResourceDictionary>节点中添加代码:
<DataTemplate x:Key="HeaderTemplateRow">
<Grid Height="30">
<TextBlock Text="It's empty" TextWrapping="Wrap" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
2.在CustomRowsPage.xaml.cs文件的构造方法中添加代码如下:
grid.TopRows.Add(new DataGridTemplateRow() { RowTemplate = (DataTemplate)Resources["HeaderTemplateRow"] });
你可以参考以下示例查看你的代码。
页:
[1]