在 C1TrueDBGrid 表格控件中显示行号

本文将要实现的功能是来自实际的客户需求,在 C1TrueDBGrid for WinForms 表格控件中显示数据行号,类似于 Excel 第一列中显示的行号效果。 C1TrueDBGrid for WinForms 本身没有内置这样的功能,因为,在 C1TrueDBGrid 中第一列是用于显示单元格选中标志,下面我们就来看看如何在 C1TrueDBGrid 中实现这一功能。

发布于 2013/06/24 00:00

本文将要实现的功能是来自实际的客户需求,在 C1TrueDBGrid for WinForms 表格控件中显示数据行号,类似于 Excel 第一列中显示的行号效果。 C1TrueDBGrid for WinForms 本身没有内置这样的功能,因为,在 C1TrueDBGrid 中第一列是用于显示单元格选中标志,下面我们就来看看如何在 C1TrueDBGrid 中实现这一功能。

在 C1TrueDBGrid 中无法自定义行头,所以我们会添加一个新的非绑定列用来代替原始的行头,并将新添加用于显示行号的列放在在表格的最左边,在添加的非绑定列中会显示行号和选中标志。当非绑定列添加之后,会触发 UnboundColumnFetch 事件,我们可以在该事件中完成以上需求,代码如下:

    private void c1TrueDBGrid1_UnboundColumnFetch(object sender, C1.Win.C1TrueDBGrid.UnboundColumnFetchEventArgs e)
    {
        if (e.Row == row)
        {
            e.Value = "";
        }
        else
        {
            if (!filter)
            {
                e.Value = (e.Row + 1).ToString();
            }
            else
            {
                if (!filterdone)
                {
                    counter++;
                    for (int i = filindex; i < filtercol.Length; i++)
                    {
                           
                        if (filtercol[i] == c1TrueDBGrid1.Columns[c1TrueDBGrid1.Col].FilterText || filtercol[i].StartsWith(c1TrueDBGrid1.Columns[c1TrueDBGrid1.Col].FilterText))
                        {
                            e.Value = rowindex[i];
                            filindex = i + 1;
                            filteredindexes[counter - 1] = rowindex[i];
                            break;
                        }
                    }
                    if (counter == c1TrueDBGrid1.RowCount)
                    {
                        counter = 0;
                        filterdone = true;
                    }
                }
                else
                {
                    e.Value = filteredindexes[e.Row];
                }
            }
        }
    }

 

接下来我们需要在 OwnerDrawCell 事件中根据当前行是否是选中行来判断单元格是显示行号还是显示选中标志,代码如下:

    // 处理OwnerDrawCell 事件
    this.c1TrueDBGrid1.OwnerDrawCell += (ss, ee) =>
    {
        if (ee.Row == row)
            ee.Style.BackgroundImage = Image.FromFile(@"..\..\Images\Rec_Sel.png");
    };

 

运行截图:

C1TrueDBGrid 行号

源码下载:VS2010 + C1 Studio for WinForms 2013V1

关于葡萄城

葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。

推荐相关案例
推荐相关资源
关注微信
葡萄城社区二维码

关注“葡萄城社区”

活字格低代码二维码

关注“活字格低代码”

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态