博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C1TrueGrid 添加行索引
阅读量:4673 次
发布时间:2019-06-09

本文共 2351 字,大约阅读时间需要 7 分钟。

我们经常收到用户的反馈,询问是否能在 C1TrueGrid 中实现类似于 Excel 程序中的行索引。行头用于指示当前活跃单元格所在行。目前,C1TrueGrid 并没有内置行头功能。在本篇博客中,我们将自定义实现该功能。

我们需要添加额外列来显示行头,我们需要定制其外观。我们将使用 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;                 break;               }             }             if (counter == c1TrueDBGrid1.RowCount)             {               counter = 0;               filterdone = true;             }          }          else          {            e.Value = filteredindexes[e.Row];          }        }      }    }

  

下一步我们需要添加当前行头指示器,这里通过 OwnerDrawCell 事件添加。代码如下:

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

  

通过以上两步,基本实现了行头功能,我们现在要考虑的是,进行过滤操作后,显示正确的行头。代码如下:

private void c1TrueDBGrid1_AfterFilter(object sender, C1.Win.C1TrueDBGrid.FilterEventArgs e) {   if (e.Condition != "")   {    filter = true;    filindex = 0;    filterdone = false;    filteredindexes = new string[c1TrueDBGrid1.RowCount];   }   else   {    filter = false;   } } private void c1TrueDBGrid1_BeforeColEdit(object sender, C1.Win.C1TrueDBGrid.BeforeColEditEventArgs e) { if (c1TrueDBGrid1.FilterActive && c1TrueDBGrid1.Columns[e.ColIndex].FilterText == "") {    filtercol = new string[c1TrueDBGrid1.RowCount];    rowindex = new string[c1TrueDBGrid1.RowCount];    for (int r = 0; r < c1TrueDBGrid1.RowCount; r++)    {      rowindex[r] = c1TrueDBGrid1[r, 0].ToString();      filtercol[r] = c1TrueDBGrid1[r,e.ColIndex].ToString();    } } }

  

效果图:

参考代码如下:

转载于:https://www.cnblogs.com/C1SupportTeam/archive/2013/03/19/C1TrueGrid-%e6%b7%bb%e5%8a%a0%e8%a1%8c%e7%b4%a2%e5%bc%95.html

你可能感兴趣的文章
自我反省
查看>>
反射,得到Type引用的三种方式
查看>>
pl sql练习(2)
查看>>
Problem B: 判断回文字符串
查看>>
谷歌浏览器,添加默认搜索引擎的搜索地址
查看>>
数据结构化与保存
查看>>
C# .net 获取程序运行的路径的几种方法
查看>>
为什么需要Docker?
查看>>
国内5家云服务厂商 HTTPS 安全性测试横向对比
查看>>
how to control project
查看>>
转 python新手容易犯的6个错误
查看>>
第四节 -- 列表
查看>>
Python入门学习笔记4:他人的博客及他人的学习思路
查看>>
webstorm里直接调用命令行
查看>>
关联规则算法之FP growth算法
查看>>
对数组序列进行洗牌
查看>>
决策树
查看>>
团队作业
查看>>
如何避免在简单业务逻辑上面的细节上面出错
查看>>
win7,Ubuntu 12.04 双系统修改启动项顺序三方法
查看>>