当前位置: 首页 > 工具软件 > SourceGrid > 使用案例 >

c# 表格控件SourceGrid使用总结

谷梁涵忍
2023-12-01

网上SourceGrid相关的资料很少,使用过程中做了下记录,以便日后查用

1:初始化

this.grid = new SourceGrid.Grid();
this.grid.Size = new System.Drawing.Size(552, 224);
this.grid.Location = new System.Drawing.Point(0, 0);
this.tabPage1.Controls.Add(this.grid);

2:设置行列

方法1: grid.Redim(20,12);
方法2: grid.ColumnsCount = 3;
       grid.RowsCount = 3;
方法3: 在属性中设置 ColumnsCount和RowsCount的值

grid.Rows.Insert(3);

3:固定行列

grid.FixedRows = 2;
grid.FixedColumns = 3;

4:标题列赋值及标题样式(标题是否自带排序)

grid[0, 0] = new SourceGrid.Cells.ColumnHeader("序号");
 grid[0, 1] = new SourceGrid.Cells.ColumnHeader("区块名称");

对标题样式进行修改
grid1[0, 0] = new MyHeader("序号");

 private class MyHeader : SourceGrid.Cells.ColumnHeader
  {
      public MyHeader(object value) : base(value)
        {
          //1 Header Row
          SourceGrid.Cells.Views.ColumnHeader view = new SourceGrid.Cells.Views.ColumnHeader();
          view.Font = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Bold);
          view.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
          View = view;
      //自带排序true;不实现排序false AutomaticSortEnabled = false; } }

5:内容列赋值

字符串类型: grid[1, 3] = new SourceGrid.Cells.Cell("Hello " + r.ToString(), typeof(string));
 复选框类型: grid[1, 5] = new SourceGrid.Cells.CheckBox(null, true);
 按钮类型:   grid[62, 2] = new SourceGrid.Cells.Button("删除");
 时间类型:   grid[1, 4] = new SourceGrid.Cells.Cell(DateTime.Today, typeof(DateTime));
        grid[1, 2] = new SourceGrid.Cells.Cell(12121);

 获取:var aa=grid[1, 4].Value.ToString();
 重新赋值: grid[r + i, 4].Value = "2";  

注意:单元格格式用上面形式,赋值用Value可以避免多次赋值无效的问题  

6:单元格宽高设置

单元格根据内容自动变化:
(不包含标题列,只对内容有效,我感觉不好用,还是根据自己需求设置宽度)
 grid.AutoSizeCells();

 grid.Columns[0].Width = 100;(要在AutoSizeCells()方法后使用,否则无效)
 grid.Rows[0].Height = 30;

7:删除某行某列

grid.Rows.Remove(3);//删除下标为3的行
grid.Columns.Remove(3);

8:设置单元格文本/图片居中及背景色(斑马线即隔行换色)

SourceGrid.Cells.Views.Cell transparentView = new SourceGrid.Cells.Views.Cell();
 transparentView.BackColor = Color.White;
 transparentView.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
 transparentView.ImageAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
 SourceGrid.Cells.Views.Cell semiTransparentView = new SourceGrid.Cells.Views.Cell();
 semiTransparentView.BackColor = Color.LightCyan;
 semiTransparentView.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
 semiTransparentView.ImageAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
CheckBoxBackColorAlternate viewCheckBox = new CheckBoxBackColorAlternate(Color.LightCyan, Color.White);

  隔行显示

  for (int r = 1; r < grid.RowsCount; r++)
  {
   for (int j = 0; j < grid.ColumnsCount; j++)
   {
    if ((r - 1) % 2 == 0) grid[r, j].View = transparentView;
    else grid[r, j].View = semiTransparentView;
   }
  }

9:按钮button的相关设置

SourceGrid.Cells.Views.Cell buttonView = new SourceGrid.Cells.Views.Button();
buttonView.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
buttonView.Padding = new DevAge.Drawing.Padding(2, 30, 2, 5);
使用:
grid[1, 20] = new SourceGrid.Cells.Button("删除");

grid[1,20].View=buttonView;

10:复选框checkBox的相关设置

        //使用:
        grid[r, 16] = new SourceGrid.Cells.CheckBox(null, true);
     CheckBoxBackColorAlternate viewCheckBox = new CheckBoxBackColorAlternate(Color.LightCyan, Color.White); grid[1, 3].View = viewCheckBox; /// <summary> /// 复选框CheckBox的相关设置 /// </summary> public class CheckBoxBackColorAlternate : SourceGrid.Cells.Views.CheckBox { public CheckBoxBackColorAlternate(Color firstColor, Color secondColor) { FirstBackground = new DevAge.Drawing.VisualElements.BackgroundSolid(firstColor); SecondBackground = new DevAge.Drawing.VisualElements.BackgroundSolid(secondColor); } private DevAge.Drawing.VisualElements.IVisualElement mFirstBackground; public DevAge.Drawing.VisualElements.IVisualElement FirstBackground { get { return mFirstBackground; } set { mFirstBackground = value; } } private DevAge.Drawing.VisualElements.IVisualElement mSecondBackground; public DevAge.Drawing.VisualElements.IVisualElement SecondBackground { get { return mSecondBackground; } set { mSecondBackground = value; } } protected override void PrepareView(SourceGrid.CellContext context) { base.PrepareView(context); if (Math.IEEERemainder(context.Position.Row, 2) == 0) Background = FirstBackground; else Background = SecondBackground; } }

注意:SourceGrid中不知道为什么没有单选按钮Radio,我为了实现效果直接用了CheckBox复选框,在单元格的点击实践中实现单选效果

private void clickEvent_Click(object sender, EventArgs e)
        {
            SourceGrid.CellContext context = (SourceGrid.CellContext)sender;
            SourceGrid.Cells.Cell btnCell = (SourceGrid.Cells.Cell)context.Cell;
           
            if (context.Position.Column == 1)//选择事件
            {
                for (int r = 1; r < grid.RowsCount; r++)
                {
                    if (r == context.Position.Row)
                    {
                        grid[r, 1].Value = true;
                    }
                    else
                    {
                        grid[r, 1].Value = false;
                    }
                }
            }
        }

11:复制粘贴

grid.ClipboardMode = SourceGrid.ClipboardMode.All;

12:单元格添加事件(点击/鼠标进入单元格显示手型,离开现实默认样式)

SourceGrid.Cells.Controllers.CustomEvents clickEvent = new SourceGrid.Cells.Controllers.CustomEvents();
clickEvent.Click += new EventHandler(clickEvent_Click);
//鼠标进入和离开
 clickEvent.MouseEnter += new EventHandler(mouseEvent_MouseEnter);
 clickEvent.MouseLeave += new EventHandler(mouseEvent_MouseLeave);
//绑定事件
 grid[r, 8].AddController(clickEvent);
//单击事件
 private void clickEvent_Click(object sender, EventArgs e)
    {
           SourceGrid.CellContext context = (SourceGrid.CellContext)sender;
           MessageBox.Show(this, context.Position.ToString());
     }
/// <summary>
/// 进入单元格鼠标显示手型
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void mouseEvent_MouseEnter(object sender, EventArgs e)
{
  SourceGrid.CellContext context = (SourceGrid.CellContext)sender;
  if (context.Position.Column == 8)
  {
    this.Cursor = Cursors.Hand;
  }
}
/// <summary>
/// 离开单元格鼠标显示默认状态
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void mouseEvent_MouseLeave(object sender, EventArgs e)
{
  SourceGrid.CellContext context = (SourceGrid.CellContext)sender;
  if (context.Position.Column == 8)
  {
    this.Cursor = Cursors.Default;
  }
}

13:隐藏/显示行/列

grid1.Columns[0].Visible=true;
grid1.Rows[1].Visible = false;

14:使单元格不可操作(不可编辑)

grid[1, 2].AddController(SourceGrid.Cells.Controllers.Unselectable.Default);

15:ComboBox下拉框的使用

SourceGrid.Cells.Editors.ComboBox cbKFJD = new SourceGrid.Cells.Editors.ComboBox(typeof(string));
cbKFJD.StandardValues = new string[] { "老区","新区" };
cbKFJD.EditableMode = SourceGrid.EditableMode.Focus | SourceGrid.EditableMode.SingleClick | SourceGrid.EditableMode.AnyKey;
grid[1, 2] = new SourceGrid.Cells.Cell("老区", cbKFJD);

16:报错索引超出界限的特殊性情况处理:

在代码中设置了足够的行数和列数但是在colspan或rowspan的时候依然报错可能原因是在属性设置中columncout或rowcount的值不够大,解决办法设置一个足够大的值就行

 

转载于:https://www.cnblogs.com/zhoushuang0426/p/10868268.html

 类似资料: