博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

grid

Posted on 2011-10-03 15:37  gczhao  阅读(272)  评论(0编辑  收藏  举报

本文转自:http://www.cnblogs.com/slzfish/archive/2010/01/30/1660169.html

 

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