热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#学习教程:颜色整行而不是单个单元格分享

颜色整行而不是单个单元格我一直试图改变CompactFrameworkDataGrid中一行的背景颜色,但由于.NETCF上的DataGrid与其WindowsForms对应物相比

颜色整行而不是单个单元格

我一直试图改变Compact Framework DataGrid中一行的背景颜色,但由于.NET CF上的DataGrid与其Windows Forms对应物相比有限,因此几乎没有成功。 我实现目标的唯一成功是我现在能够根据其值改变单个单元格的背景颜色。 我无法操纵我从谷歌搜索获得的代码,因为我在C#中不是那么好。 但是,这是我的代码:

namespace GridColor { public delegate void CheckCellEventHandler(object sender, DataGridEnableEventArgs e); public class DataGridEnableEventArgs : EventArgs { private int _column; private int _row; private bool _meetsCriteria; public DataGridEnableEventArgs(int row, int col, bool val) { _row = row; _column = col; _meetsCriteria = val; } public int Column { get { return _column; } set { _column = value; } } public int Row { get { return _row; } set { _row = value; } } public bool MeetsCriteria { get { return _meetsCriteria; } set { _meetsCriteria = value; } } } public partial class ColumnStyle : DataGridTextBoxColumn { //public event CheckCellEventHandler CheckCellEquals; public event CheckCellEventHandler CheckCellContains; private int _col; public ColumnStyle(int column) { _col = column; } protected override void Paint(Graphics g, Rectangle Bounds, CurrencyManager Source, int RowNum, Brush BackBrush, Brush ForeBrush, bool AlignToRight) { bool enabled = true; if (CheckCellContains != null) { DataGridEnableEventArgs e = new DataGridEnableEventArgs(RowNum, _col, enabled); CheckCellContains(this, e); if (e.MeetsCriteria) //g.DrawRectangle(new Pen(Color.Red, 2), Bounds.Y + 1, Bounds.Width - 2, Bounds.Height - 2); BackBrush = new SolidBrush(Color.PaleGreen); } base.Paint(g, Bounds, Source, RowNum, BackBrush, ForeBrush, AlignToRight); } } } 

现在我的表格,我有这个:

 namespace GridColor { public partial class Form1 : Form { DataSet ds; SqlDataAdapter da; private List compareValues = new List(); public Form1() { InitializeComponent(); try { addGridStyle(ref dataGrid1); compareValues.Add("OK"); compareValues.Add("Filling"); } catch (Exception ex) { MessageBox.Show("Error: " + ex.ToString()); } } private void addGridStyle(ref DataGrid dg) { DataGridTableStyle dtStyle = new DataGridTableStyle(); dtStyle.MappingName = "Test"; string cOnnString= "Data Source=192.168.2.16,1433;Initial Catalog=TestDB;User ID=sa;Password=ABC12abc;"; SqlConnection cOnn= new SqlConnection(connString); conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.COnnection= conn; cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT * FROM Test"; ds = new DataSet(); da = new SqlDataAdapter(cmd); da.Fill(ds, "Test"); for (int i = 0; i  

在我的代码的哪一部分应该改变,以便如果一个单元符合标准,它的整行将被着色而不是只有它自己的单元格?

好吧,我回去找了几年前的代码,我在台式机上做了这个,然后是更高级的DataGridView出来之前等等。

首先,本教程是Microsoft 自定义Windows窗体DataGrid的 ,它解释了如何突出显示整行。

我查看了我的代码,我必须为每个列添加一个自定义列样式,向我处理的主窗体发出一个事件,然后确定该记录的正确颜色。 然后,我设置args.Color属性,DataGridColumn将绘制正确的颜色。 所以是的,你必须让每一列成为你的自定义formtable类,然后你的应用程序逻辑可以处理事件,获取记录数据并确定颜色

**更新:这是一个简单的例子**

 public partial class Form1 : Form { FormattableTextBoxColumn firstNameColumn = new FormattableTextBoxColumn(); FormattableTextBoxColumn lastNameColumn = new FormattableTextBoxColumn(); public Form1() { InitializeComponent(); // add first name col firstNameColumn.MappingName = "FirstName"; dataGridTableStyle1.GridColumnStyles.Add(firstNameColumn); firstNameColumn.SetCellFormat += new FormatCellEventHandler(ColumnSetCellFormat); // add last name col lastNameColumn.MappingName = "LastName"; lastNameColumn.SetCellFormat += new FormatCellEventHandler(ColumnSetCellFormat); dataGridTableStyle1.GridColumnStyles.Add(lastNameColumn); // This just sets up a dummy data source, since I don't have a database in this example List peopleList = new List(); peopleList.Add(new PersonTest { FirstName = "Alan", LastName = "QQQQQ", HighlightPerson = true }); peopleList.Add(new PersonTest { FirstName = "John", LastName = "Smith", HighlightPerson = false }); BindingSource peopleDataSource = new BindingSource(); peopleDataSource.DataSource = peopleList; dataGridTableStyle1.MappingName = peopleDataSource.GetListName(null); dataGrid1.DataSource = peopleDataSource; } // I'll cache this brush in the form, just make sure to dispose it (see designer.cs disposing) SolidBrush highlightBrush = new SolidBrush(Color.Yellow); // here is the event you can handle to determine the color of your row! private void ColumnSetCellFormat(object sender, DataGridFormatCellEventArgs e) { if ((e.Source.List[e.Row] as PersonTest).HighlightPerson) e.BackBrush = highlightBrush; } // example test class public class PersonTest { public String FirstName { get; set; } public String LastName { get; set; } public bool HighlightPerson { get; set; } } } 

和自定义数据网格列

 public class FormattableTextBoxColumn : DataGridTextBoxColumn { public event FormatCellEventHandler SetCellFormat; protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight) { DataGridFormatCellEventArgs e = new DataGridFormatCellEventArgs(rowNum, source); e.ForeBrush = foreBrush; e.BackBrush = backBrush; OnSetCellFormat(e); base.Paint(g, bounds, source, rowNum, e.BackBrush, e.ForeBrush, alignToRight); } private void OnSetCellFormat(DataGridFormatCellEventArgs e) { FormatCellEventHandler handler = SetCellFormat; if (handler != null) handler(this, e); } } 

您还需要此DataGridCellEventArgs.cs

 public delegate void FormatCellEventHandler(object sender, DataGridFormatCellEventArgs e); public class DataGridFormatCellEventArgs : EventArgs { public int Row; public CurrencyManager Source; public Brush BackBrush; public Brush ForeBrush; public DataGridFormatCellEventArgs(int row, CurrencyManager manager) { this.Row = row; this.Source = manager; } } 

这是一个示例项目:

DataGridTest.zip

我没有和CF一起工作,但是我想我会把它扔出去……如果你可以访问单元格,那么这行不是NamingContainer吗? 如果是这样,您可以向上钻取行并应用样式或使用CSS类添加属性。

上述就是C#学习教程:颜色整行而不是单个单元格分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记


推荐阅读
  • 本文探讨了如何在C#应用程序中通过选择ComboBox项从MySQL数据库中检索数据值。具体介绍了在事件处理方法 `comboBox2_SelectedIndexChanged` 中可能出现的常见错误,并提供了详细的解决方案和优化建议,以确保数据能够正确且高效地从数据库中读取并显示在界面上。此外,还讨论了连接字符串的配置、SQL查询语句的编写以及异常处理的最佳实践,帮助开发者避免常见的陷阱并提高代码的健壮性。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 本文详细探讨了MySQL数据库实例化参数的优化方法及其在实例查询中的应用。通过具体的源代码示例,介绍了如何高效地配置和查询MySQL实例,为开发者提供了有价值的参考和实践指导。 ... [详细]
  • 在 Windows 10 环境中,通过配置 Visual Studio Code (VSCode) 实现基于 Windows Subsystem for Linux (WSL) 的 C++ 开发,并启用智能代码提示功能。具体步骤包括安装 VSCode 及其相关插件,如 CCIntelliSense、TabNine 和 BracketPairColorizer,确保在 WSL 中顺利进行开发工作。此外,还详细介绍了如何在 Windows 10 中启用和配置 WSL,以实现无缝的跨平台开发体验。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • SQL 查询实体优化与实战技巧分享 ... [详细]
  • 针对MySQL Undo空间满载及Oracle Undo表空间溢出的问题,本文详细探讨了其原因与解决策略。首先,通过启动SQL*Plus并以SYS用户身份登录数据库,查询当前数据库的UNDO表空间名称,确认当前状态。接着,分析导致Undo空间满载的常见原因,如长时间运行的事务、频繁的更新操作等,并提出相应的解决方案,包括调整Undo表空间大小、优化事务管理、定期清理历史数据等。最后,结合实际案例,提供具体的实施步骤和注意事项,帮助DBA有效应对这些问题。 ... [详细]
  • 深入解析C#中app.config文件的配置与修改方法
    在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • InnoDB当前仅支持一次创建一个FULLTEXT索引 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
author-avatar
mobiledu2502909493
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有