1 GridControl 根据两列的值的关系 设置前景色 背景色 字体等同理
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
//绑定数据 private void DataBind() { List<Entity> list = new List<Entity>(); list.Add(new Entity { ID = "1", Name = "Name", Age = "20", Age1 = "1" }); list.Add(new Entity { ID = "2", Name = "Name", Age = "21", Age1 = "1" }); list.Add(new Entity { ID = "2", Name = "Name", Age = "21", Age1 = "1" }); //构造数据实体集合 绑定 this.gridControl2.DataSource = list; this.gridView2.OptionsBehavior.Editable = false; //不可编辑 this.gridView2.OptionsView.ShowGroupPanel = false; //不显示分组panel this.gridView2.OptionsView.ShowColumnHeaders = false; //不显示列标题 } //设置列对比前景色变化 private void gridView2_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e) { if (e.Column.FieldName == "Age1") { //获取要比较的两列的值 string value1 = gridView2.GetRowCellValue(e.RowHandle, gridView1.Columns["Age"]).ToString(); string value2 = gridView2.GetRowCellValue(e.RowHandle, gridView1.Columns["Age1"]).ToString(); if (value1 != value2) { e.Appearance.ForeColor = Color.Red; //设置前景色 } } }
2 导入CSV文件 (列顺序会变化顺序并包含一定判断)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
private void btn_Click(object sender, EventArgs e) { OpenFileDialog open = new OpenFileDialog(); StreamReader reader = null; open.Filter = "*.csv|*.csv"; if (open.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } else { reader = new StreamReader(open.FileName, Encoding.Default); ////是否空文件 if (string.IsNullOrEmpty(reader.ReadToEnd())) { MessageBox.Show("请选择包含数据的文件"); reader.Close(); return; } //是否有列标题 reader.BaseStream.Seek(0, SeekOrigin.Begin); //从头开始读取流 string line = reader.ReadLine(); while (string.IsNullOrEmpty(line)) { line = reader.ReadLine(); } string[] captital = line.Split(','); if (captital[0] != "会员号" && captital[0] != "会员简称" && captital[0] != "分类监管指标") { MessageBox.Show("文件格式错误"); reader.Close(); return; } //获取列标题及其顺序的字典 Dictionary<string, int> capitslList = new Dictionary<string, int>(); capitslList = GetCapitalList(captital); //读取导入数据 string lineData = reader.ReadLine(); //错误列表 List<string> ErrorList = new List<string>(); //数据列表 List<string> ImportList = new List<string>(); ErrorList.Clear(); ImportList.Clear(); //读取数据到List<string> ImportList为验证通过(可能在写库的时候出错)ErrorList保存验证出错数据和写库时出错的数据 while (!string.IsNullOrEmpty(lineData)) { if (string.IsNullOrEmpty(lineData.Split(',')[0])) { ErrorList.Add(lineData + "," + capitslList.First().Key + "不能为空"); lineData = reader.ReadLine(); continue; } //会员号位纯数字 int MeneberIndex = 0; capitslList.TryGetValue("会员号", out MeneberIndex); if (!IsAllNumber(lineData.Split(',')[MeneberIndex])) { ErrorList.Add(lineData + ",会员号格式错误,必须位纯数字"); lineData = reader.ReadLine(); continue; } //分类监管指标位纯数字 int S_Index = 0; capitslList.TryGetValue("分类监管指标", out S_Index); if (!IsAllNumber(lineData.Split(',')[S_Index])) { ErrorList.Add(lineData + ",分类监管指标格式错误,必须位纯数字"); lineData = reader.ReadLine(); continue; } ImportList.Add(lineData); lineData = reader.ReadLine(); } int SuccessCount = 0; List<string> ImportErrorList = new List<string>(); ImportErrorList.Clear(); ImportData(ImportList, capitslList, out ImportErrorList, out SuccessCount); ErrorList.AddRange(ImportErrorList); if (ErrorList.Count > 0) { //SomeThing } else { //SomeThing } } } private bool IsAllNumber(string str) { char[] chars = str.ToCharArray(); foreach (char c in chars) { if (char.IsDigit(c)) { continue; } else return false; } return true; } //获取列标题及其顺序 private Dictionary<string, int> GetCapitalList(string[] captital) { Dictionary<string, int> CapitalList = new Dictionary<string, int>(); if (captital[0] == "会员号") { CapitalList.Add("会员号", 0); if (captital[1] == "会员简称") { CapitalList.Add("会员简称", 1); CapitalList.Add("分类监管指标", 2); } else { CapitalList.Add("分类监管指标", 1); CapitalList.Add("会员简称", 2); } } if (captital[0] == "会员简称") { CapitalList.Add("会员简称", 0); if (captital[1] == "会员号") { CapitalList.Add("会员号", 1); CapitalList.Add("分类监管指标", 2); } else { CapitalList.Add("分类监管指标", 1); CapitalList.Add("会员号", 2); } } if (captital[0] == "分类监管指标") { CapitalList.Add("分类监管指标", 0); if (captital[1] == "会员号") { CapitalList.Add("会员号", 1); CapitalList.Add("会员简称", 2); } else { CapitalList.Add("会员简称", 1); CapitalList.Add("会员号", 2); } } return CapitalList; } private void ImportData(List<string> importdata, Dictionary<string, int> capitsllist, out List<string> importerrorist, out int successcount) { int SuccessCount = 0; List<string> ImportErrorist = new List<string>(); int MemberIDIndex = 0; int MemberAbbrIndex = 0; int S_Index = 0; capitsllist.TryGetValue("会员号", out MemberIDIndex); capitsllist.TryGetValue("会员简称", out MemberAbbrIndex); capitsllist.TryGetValue("分类监管指标", out S_Index); foreach (string data in importdata) { string[] dataArray = data.Split(','); string memberid = dataArray[MemberIDIndex]; string memberabbr = dataArray[MemberAbbrIndex]; string membersindex = dataArray[S_Index]; if (!Insert()) //执行Dac方法 写入数据库 { ImportErrorist.Add(data + "," + errorcode); continue; } else { SuccessCount++; } } importerrorist = ImportErrorist; successcount = SuccessCount; } private bool Insert() { //自己需要的方法 return true; }
3 GridControl常用属性
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
//只读 gridView1.OptionsBehavior.ReadOnly = true; //选择行背景色一致 gridView1.OptionsSelection.EnableAppearanceFocusedCell = false; //选择模式 RowSelect为整行选中 CellSelect为选择单元格 CheckBoxRowSelect复选框选中行 gridView1.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect; //显示筛选行 gridView1.OptionsView.ShowAutoFilterRow = false; //筛选条件panel gridView1.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never; //页脚 gridView1.OptionsView.ShowFooter = false; //分组panel gridView1.OptionsView.ShowGroupPanel = false; //自动列宽 gridView1.OptionsView.ColumnAutoWidth = true; //执行.AddNewRow()方法后新增行的位置 分别为 top bottom none gridView1.OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.Top; //新增一行 gridView1.AddNewRow(); //单元格可编辑 gridView1.OptionsBehavior.Editable = true; //单元格编辑模式 gridView1.OptionsBehavior.EditingMode = DevExpress.XtraGrid.Views.Grid.GridEditingMode.Default; //何种动作出发单元格编辑 gridView1.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.Click; gridControl1.DataSource = Data;