CanYou1 发表于 2015-9-1 14:39:00

如何给C1DataGrid设置“暂无数据”?

Alice,当一个C1DataGrid列表搜索数据但无匹配结果时,如何像下面这样在C1DataGrid列表体里面给个“暂无数据”提示?(这个问题很急,能不能马上帮忙看下?谢谢)

Alice 发表于 2015-9-1 15:40:00

回复 1楼CanYou1的帖子

谢谢提供的图片。
很抱歉C1DataGrid无法支持添加一个无绑定的行展示数据。

CanYou1 发表于 2015-9-1 15:48:00

回复 2楼Alice的帖子

我正在尝试你们提供的Custom Rows功能,是不是可以从这里找到突破口?这个PDF解说有点简单了,弄得我去里雾里的,麻烦你也帮忙看看,是不是可以这样去做?


Alice 发表于 2015-9-1 16:52:00

回复 3楼CanYou1的帖子

根据我的理解,它不能实现你的需求。
CustomRows可以对你的行的样式做自定义:包含创建的行,新行以及分组行等。
根据你1楼提到的,你在过滤后c1dataGrid是没有数据的,CustomRows是对数据进行展示的。
CustomRows的功能可以参考随机安装示例:
\Documents\ComponentOne Samples\WPF\C1.WPF.DataGrid\CS\DataGridSamples\Advanced\CustomRows

CanYou1 发表于 2015-9-1 17:08:00

回复 4楼Alice的帖子

CustomRows不行,那有没有什么别的办法能 实现我的需求呢?毕竟需求是很合理的啊

Alice 发表于 2015-9-1 17:14:00

回复 5楼CanYou1的帖子

你的需求是在数据绑定的时候添加非绑定的数据,因此C1DataGrid无法实现。
你添加的这个字段无法存到数据源的字段做对应。

有一个简单的但和C1DataGrid没有关系的方法,添加一个text控件展示文字,根据你过滤的情况,将这个控件隐藏或是展示出来。

CanYou1 发表于 2015-9-1 17:31:00

回复 6楼Alice的帖子

没有数据这个简单啊,我可以在没数据时,造一条假数据,把其中一个字段值设成“暂无数据”就行。关键是如何把它展示到DataGrid里面。

CanYou1 发表于 2015-9-1 17:41:00

回复 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;

    }

已经能给列表加上一个自定义行,效果如下,只是文字“暂无数据”不显示,不知为何?

Alice 发表于 2015-9-2 10:40:00

回复 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]
查看完整版本: 如何给C1DataGrid设置“暂无数据”?