1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Windows.Forms;
    5. using DevExpress.XtraGrid.Columns;
    6. using DevExpress.XtraGrid.Views.Base;
    7. using DevExpress.XtraGrid.Views.BandedGrid;
    8. using DevExpress.XtraEditors.Repository;
    9. namespace XtraGridDemo1
    10. {
    11. public partial class Form1 : DevExpress.XtraEditors.XtraForm
    12. {
    13. public Form1()
    14. {
    15. InitializeComponent();
    16. //首先拖到窗体上一个GridControl,在表格上点击“Click here to change view”链接,在弹出菜单中选择“convert to”-->“AdvBandedGridView”。
    17. InitGrid();
    18. }
    19. ///初始化表格
    20. private void InitGrid()
    21. {
    22. // advBandedGridView1是表格上的默认视图,注意这里声明的是:BandedGridView
    23. BandedGridView view = advBandedGridView1 as BandedGridView;
    24. view.BeginUpdate(); //开始视图的编辑,防止触发其他事件
    25. view.BeginDataUpdate(); //开始数据的编辑
    26. view.Bands.Clear();
    27. //修改附加选项
    28. view.OptionsView.ShowColumnHeaders = false; //因为有Band列了,所以把ColumnHeader隐藏
    29. view.OptionsView.ShowGroupPanel = false; //如果没必要分组,就把它去掉
    30. view.OptionsView.EnableAppearanceEvenRow = false; //是否启用偶数行外观
    31. view.OptionsView.EnableAppearanceOddRow = true; //是否启用奇数行外观
    32. view.OptionsView.ShowFilterPanelMode = ShowFilterPanelMode.Never; //是否显示过滤面板
    33. view.OptionsCustomization.AllowColumnMoving = false; //是否允许移动列
    34. view.OptionsCustomization.AllowColumnResizing = false; //是否允许调整列宽
    35. view.OptionsCustomization.AllowGroup = false; //是否允许分组
    36. view.OptionsCustomization.AllowFilter = false; //是否允许过滤
    37. view.OptionsCustomization.AllowSort = true; //是否允许排序
    38. view.OptionsSelection.EnableAppearanceFocusedCell = true; //???
    39. view.OptionsBehavior.Editable = true; //是否允许用户编辑单元格
    40. //添加列标题
    41. GridBand bandID = view.Bands.AddBand("ID");
    42. bandID.Visible = false; //隐藏ID列
    43. GridBand bandName = view.Bands.AddBand("姓名");
    44. GridBand bandSex = view.Bands.AddBand("性别");
    45. GridBand bandBirth = view.Bands.AddBand("出生日期");
    46. GridBand bandScore = view.Bands.AddBand("分数");
    47. GridBand bandMath = bandScore.Children.AddBand("数学");
    48. GridBand bandChinese = bandScore.Children.AddBand("语文");
    49. GridBand bandEnglish = bandScore.Children.AddBand("英语");
    50. GridBand bandSubTotal = bandScore.Children.AddBand("小计");
    51. GridBand bandRemark = view.Bands.AddBand("备注");
    52. //列标题对齐方式
    53. bandName.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
    54. bandSex.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
    55. bandBirth.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
    56. bandScore.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
    57. bandMath.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
    58. bandChinese.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
    59. bandEnglish.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
    60. bandSubTotal.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
    61. bandRemark.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
    62. //模拟几个数据
    63. List<Record> listDataSource = new List<Record>();
    64. listDataSource.Add(new Record(1, "张三","男",Convert.ToDateTime("1989-5-6") ,115.5f,101,96,""));
    65. listDataSource.Add(new Record(2, "李四", "女", Convert.ToDateTime("1987-12-23"), 92, 85, 87, ""));
    66. listDataSource.Add(new Record(3, "王五", "女", Convert.ToDateTime("1990-2-11"), 88, 69, 41.5f, ""));
    67. listDataSource.Add(new Record(4, "赵六", "男", Convert.ToDateTime("1988-9-1"), 119, 108, 110, "备注行"));
    68. //绑定数据源并显示
    69. gridControl1.DataSource = listDataSource;
    70. gridControl1.MainView.PopulateColumns();
    71. //[小计]这一列因为没绑定数据源,所以需要手动添加
    72. //(有点复杂,慢慢看吧)
    73. string[] fieldNames = new string[] { "SubTotal" };
    74. GridColumn column; //声明单列
    75. column = view.Columns.AddField(fieldNames[0]); //添加一个数据字段
    76. column.VisibleIndex = view.Columns.Count -1; //设置该列在编辑视图时的显示位置(倒数第二列)
    77. column.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
    78. column.OptionsColumn.AllowEdit = false; //此列不可编辑
    79. column.Visible = true;
    80. view.Columns.Add(column); //视图中添加一列
    81. //绑定事件,当[分数]改变时[小计]也跟着变
    82. //(好像只有在绑定事件里才能改变该单元格数值,直接修改无效)
    83. view.CustomUnboundColumnData += new
    84. DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(advBandedGridView1_CustomUnboundColumnData);
    85. //[性别]列绑定ComboBox
    86. RepositoryItemComboBox riCombo = new RepositoryItemComboBox();
    87. riCombo.Items.AddRange(new string[] {"男", "女"});
    88. gridControl1.RepositoryItems.Add(riCombo);
    89. view.Columns["Sex"].ColumnEdit = riCombo;
    90. //[出生年月]列绑定Date
    91. RepositoryItemDateEdit riDate = new RepositoryItemDateEdit();
    92. gridControl1.RepositoryItems.Add(riDate);
    93. view.Columns["Birth"].ColumnEdit = riDate;
    94. //[分数]列绑定SpinEdit
    95. RepositoryItemSpinEdit riSpin = new RepositoryItemSpinEdit();
    96. gridControl1.RepositoryItems.Add(riSpin);
    97. view.Columns["Math"].ColumnEdit = riSpin;
    98. view.Columns["Chinese"].ColumnEdit = riSpin;
    99. view.Columns["English"].ColumnEdit = riSpin;
    100. //[备注]列绑定MemoExEdit
    101. RepositoryItemMemoExEdit riMemoEx = new RepositoryItemMemoExEdit();
    102. gridControl1.RepositoryItems.Add(riMemoEx);
    103. view.Columns["Remark"].ColumnEdit = riMemoEx;
    104. //小计列添加汇总
    105. view.OptionsView.ShowFooter = true; //显示表格页脚
    106. view.Columns["SubTotal"].SummaryItem.FieldName = "SubTotal";
    107. view.Columns["SubTotal"].SummaryItem.DisplayFormat = "{0:f2}";
    108. view.Columns["SubTotal"].SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Average;
    109. //将标题列和数据列对应
    110. view.Columns["ID"].OwnerBand = bandID;
    111. view.Columns["Name"].OwnerBand = bandName;
    112. view.Columns["Sex"].OwnerBand = bandSex;
    113. view.Columns["Birth"].OwnerBand = bandBirth;
    114. view.Columns["Math"].OwnerBand = bandMath;
    115. view.Columns["Chinese"].OwnerBand = bandChinese;
    116. view.Columns["English"].OwnerBand = bandEnglish;
    117. view.Columns["SubTotal"].OwnerBand = bandSubTotal;
    118. view.Columns["Remark"].OwnerBand = bandRemark;
    119. view.EndDataUpdate();//结束数据的编辑
    120. view.EndUpdate(); //结束视图的编辑
    121. }
    122. // 计算小计
    123. private float calcSubTotal(float math, float chinese, float english)
    124. {
    125. return math + chinese + english;
    126. }
    127. private void advBandedGridView1_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
    128. {
    129. ColumnView colView = sender as ColumnView;
    130. if (e.Column.FieldName == "SubTotal" && e.IsGetData) e.Value = calcSubTotal(
    131. Convert.ToSingle(colView.GetRowCellValue(e.RowHandle, colView.Columns["Math"])),
    132. Convert.ToSingle(colView.GetRowCellValue(e.RowHandle, colView.Columns["Chinese"])),
    133. Convert.ToSingle(colView.GetRowCellValue(e.RowHandle, colView.Columns["English"])));
    134. }
    135. #region 运行时绑定到实现Ilist接口的数据源
    136. public class Record
    137. {
    138. int id;
    139. DateTime birth;
    140. string name, sex, remark;
    141. float math, chinese, english;
    142. public Record(int id, string name, string sex, DateTime birth, float math, float chinese, float english, string remark)
    143. {
    144. this.id = id;
    145. this.name = name;
    146. this.sex = sex;
    147. this.birth = birth;
    148. this.math = math;
    149. this.chinese = chinese;
    150. this.english = english;
    151. this.remark = remark;
    152. }
    153. public int ID { get { return id; } }
    154. public string Name
    155. {
    156. get { return name; }
    157. set { name = value; }
    158. }
    159. public string Sex
    160. {
    161. get { return sex; }
    162. set { sex = value; }
    163. }
    164. public DateTime Birth
    165. {
    166. get { return birth; }
    167. set { birth = value; }
    168. }
    169. public float Math
    170. {
    171. get { return math; }
    172. set { math = value; }
    173. }
    174. public float Chinese
    175. {
    176. get { return chinese; }
    177. set { chinese = value; }
    178. }
    179. public float English
    180. {
    181. get { return english; }
    182. set { english = value; }
    183. }
    184. public string Remark
    185. {
    186. get { return remark; }
    187. set { remark = value; }
    188. }
    189. }
    190. #endregion
    191. }
    192. }

XGrid绑定(转)的更多相关文章

  1. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  2. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  3. MVVM模式解析和在WPF中的实现(三)命令绑定

    MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  4. 冒泡,setinterval,背景图的div绑定事件,匿名函数问题

    1.会冒泡到兄弟元素么? $(function(){ $("#a").click(function(){alert("a")}) $("#b" ...

  5. Xamarin+Prism开发详解二:Xaml文件如何简单绑定Resources资源文件内容

    我们知道在UWP里面有Resources文件xxx.resx,在Android里面有String.Xml文件等.那跨平台如何统一这些类别不一的资源文件以及Xaml设计文件如何绑定这些资源?应用支持多国 ...

  6. 数据的双向绑定 Angular JS

    接触AngularJS许了,时常问自己一些问题,如果是我实现它,会在哪些方面选择跟它相同的道路,哪些方面不同.为此,记录了一些思考,给自己回顾,也供他人参考. 初步大致有以下几个方面: 数据双向绑定 ...

  7. Html.DropDownLis绑定数据库

    效果: 方法一: View: <div class="col-md-md-4"> <div class="input-group"> & ...

  8. ASP.NET MVC——模型绑定

    这篇文章我们来讲讲模型绑定(Model Binding),其实在初步了解ASP.NET MVC之后,大家可能都会产生一个疑问,为什么URL片段最后会转换为例如int型或者其他类型的参数呢?这里就不得不 ...

  9. Spring MVC初始化参数绑定

    初始化参数绑定与类型转换很类似,初始化绑定时,主要是参数类型 ---单日期 在处理器类中配置绑定方法  使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型   proper ...

随机推荐

  1. 三 最简单的 AndEngine 程序框架

    package com.example.AndEngineExample; import org.anddev.andengine.engine.Engine;import org.anddev.an ...

  2. IT技术人士 不能一辈子靠技术生存

    我现在是自己做,但我此前有多年在从事软件开发工作,当回过头来想一想自己,觉得特别想对那些初学JAVA/DOT.NET技术的朋友说点心里话,希望你们能从我们的体会中,多少受点启发(也许我说的不好,你不赞 ...

  3. Linux下信号的简单使用

    1,1个main, 包含2个while, 不要被两个while中的sleep所迷惑,这里只有main()这一个主线程(进程)在运行,程序会按照自上而下顺序执行. 遇到第1个while循环中的sleep ...

  4. hdu 5469 Antonidas (dfs+剪枝)2015 ACM/ICPC Asia Regional Shanghai Online

    题意: 给出一棵树,再给出每个节点上的值(一个char字符)这些值以一个字符串s1表示,然后给出一个s2字符串,问在这棵树上是否存在两个点,从一个点走到另一个点所经过的路径上的char字符组成的字符串 ...

  5. bjfu1277 简单递归

    比较简单的递归问题.对于第k时刻的图形,可以平均分成四块,左上,右上,左下这三块的图形是一模一样的,右下的那一块不包含红毛僵尸,所以把那三块里的加起来就是结果了. /* * Author : ben ...

  6. nodejs ctrl+B 快捷键设置

    开发 nodejs 的时候,要使用 sublime 软件,其中的启动方式有很多中.可以通过 supersivor 当然也可以 利用nodejs 的自身功能通过 ctrl+B来直接启动. 具体设置方式, ...

  7. vector.resize 与 vector.reserve的区别 .xml

    pre{ line-height:1; color:#9f1d66; background-color:#a0ffc0; font-size:16px;}.sysFunc{color:#5d57ff; ...

  8. 二级指针的作用及用途 .xml

    pre{ line-height:1; color:#9f1d66; background-color:#e1e1e1; font-size:16px;}.sysFunc{color:#5d57ff; ...

  9. CentOS下安装gns3

    1.安装支持环境 sudo yum intall PyQt4 telnet 2.安装抓包用的wireshark sudo yum install wireshark wireshark-gnome 3 ...

  10. leetcode–jump game II

    1.题目描述 Given an array of non-negative integers, you are initially positioned at the first index of t ...