CanYou8 发表于 2016-1-27 14:25:00

C1FlexGrid如何给列加上序号?

在C1DataGrid中,可以采用下面的代码实现列序号
                        <c1:C1DataGrid Name="c1Datagrid" CanUserAddRows="False" CanUserEditRows="False"
                                 ItemsSource="{Binding List}" CanUserFilter="False" IsReadOnly="True"
                                 SelectedItem="{Binding CurrentItem, Mode=TwoWay}" SelectionMode="SingleRow">
                            <c1:C1RowIndexHeaderBehavior.RowIndexHeaderBehavior>
                              <Binding Path="PageInitialIndex"/>
                            </c1:C1RowIndexHeaderBehavior.RowIndexHeaderBehavior>
                        </c1:C1DataGrid>

效果:


问题:在C1FlexGrid中如何实现类似的效果?

Alice 发表于 2016-1-27 15:47:00

回复 1楼CanYou8的帖子

C1FlexGrid下没有提供这个功能。
它需要自己去设置。
比如重写CellFactory,重写CreateRowHeaderContent方法,设置rowindex。

CanYou8 发表于 2016-1-27 16:08:00

重写CellFactory,如何确定首列?列序号如何显示在制定位置?还有,分页时怎么处理?

Alice 发表于 2016-1-27 17:29:00

回复 3楼CanYou8的帖子

根据您的需求,重写CellFactory较复杂。
您可以直接给FlexGrid的Rowheader设置值。
FlexGrid.RowHeader直接循环设置数字,您也可以自己根据需求去逻辑判断哪一行赋值是什么。

CanYou8 发表于 2016-1-29 09:55:00

已实现,谢谢!
            for (int i = 0; i &lt; c1FlexGrid.Rows.Count; i++)
            {
                c1FlexGrid.RowHeaders = _vm.PageSize * (_vm.PageIndex - 1) + i + 1;
            }

Alice 发表于 2016-1-29 10:05:00

回复 5楼CanYou8的帖子

谢谢反馈。

CanYou8 发表于 2016-2-15 11:38:00

给FlexGrid的Rowheader设置rowindex后,发现序号显示时是偏左的,如下图所示。请问如何设置,可以让它在左右方向上居中?

Alice 发表于 2016-2-15 12:19:00

回复 7楼CanYou8的帖子

和之前提问设置表头居中的帖子类似。
http://gcdn.gcpowertools.com.cn/showtopic-20509.html

重写CellFactory的CreateRowHeaderContent方法,然后设置居中即可。

代码参考:
public class MyCellFactory : CellFactory
{
    // static fields
    static Thickness _thicknessEmpty = new Thickness(0);

    public override void CreateRowHeaderContent(C1FlexGrid grid, Border bdr, CellRange rng)
    {
      // first column contains numbers
      if (rng.Column == 0)
      {
            var tb = new TextBlock();
            tb.HorizontalAlignment = HorizontalAlignment.Center;
            tb.VerticalAlignment = VerticalAlignment.Center;
            tb.Text = string.Format(&quot;{0}&quot;, rng.Row + 1);
            bdr.Padding = _thicknessEmpty;
            bdr.Child = tb;
      }
    }
}

CanYou8 发表于 2016-2-15 15:18:00

回复 8楼Alice的帖子

非常感谢!采用重写CellFactory的CreateRowHeaderContent方法已经实现了居中的效果!
另外,如果C1FlexGrid序号比较大时,能否像C1DataGrid那样自动加宽,而不是像下图所示C1FlexGrid那样显示不全?

Alice 发表于 2016-2-15 16:38:00

回复 9楼CanYou8的帖子

您可以使用在另一个帖子提到AutoSizeColumns方法设置自动列宽。
http://gcdn.gcpowertools.com.cn/showtopic-20218.html
页: [1] 2
查看完整版本: C1FlexGrid如何给列加上序号?