C# DataGridView 对指定行文字加粗实现阅读标记

在使用DataGridView控件放置通知等信息时,会遇到标记“已读”、“未读”的问题。通过SQL语句查询出的结果中,“已读”、“未读”会被放在一个专门的字段(DataGridView的列)中用来标记这个 条目的阅读情况。本文的目标就是要做到在显示上区分当前用户已读和未读的条目。

1、准备工作

建立一个C#窗体应用程序,里面放置一个Dock属性设置为Full的DataGridView

2、程序代码

在Load函数中,模拟生成了一个数据源,处理DataGridView显示状态的代码放在DataSourceChanged事件中,即每当DataSource重新被赋值时刷新DataGridView的显示状态。代码中按IsRead列的值判断该行数据是否为“已读”

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace test
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        private void FormMain_Load(object sender, EventArgs e)
        {
            //生成数据源
            DataTable dtTestData = new DataTable();

            dtTestData.Columns.Add("Title");
            dtTestData.Columns.Add("Content");
            dtTestData.Columns.Add("IsRead");

            dtTestData.Rows.Add("标题1", "正文1", true);
            dtTestData.Rows.Add("标题2", "正文2", false);
            dtTestData.Rows.Add("标题3", "正文3", true);
            dtTestData.Rows.Add("标题4", "正文4", false);
            dtTestData.Rows.Add("标题5", "正文5", true);

            this.dgvTestData.DataSource = dtTestData;
        }

        /// <summary>
        /// 数据表内数据源发生变化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvTestData_DataSourceChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < dgvTestData.Rows.Count; i++)
            {
                string isRead = dgvTestData.Rows[i].Cells["IsRead"].Value.ToString();
                if (isRead.ToLower().Trim() == "true")
                {
                    //TODO 已读处理
                    dgvTestData.Rows[i].DefaultCellStyle.ForeColor = Color.Black;
                    dgvTestData.Rows[i].DefaultCellStyle.BackColor = Color.White;
                    dgvTestData.Rows[i].DefaultCellStyle.Font = 
                        new Font("宋体", 9F, FontStyle.Regular);
                }
                else
                {
                    //TODO 未读处理
                    dgvTestData.Rows[i].DefaultCellStyle.ForeColor = Color.Black;
                    dgvTestData.Rows[i].DefaultCellStyle.BackColor = Color.White;
                    dgvTestData.Rows[i].DefaultCellStyle.Font = 
                        new Font("宋体", 9F, FontStyle.Bold | FontStyle.Underline);
                }
            }
        }
    }
}

如果不需要对某行操作,而是只需要对某个单元格做出样式上的改变,可以写成下面这样:

dgvTestData.Rows[i].Cells["XXX"].Style.ForeColor = Color.Black;
dgvTestData.Rows[i].Cells["XXX"].Style.BackColor = Color.White;
dgvTestData.Rows[i].Cells["XXX"].Style.Font = new Font("宋体", 9F, FontStyle.Regular);

3、运行示例

根据IsRead列的值判断指定行是否加粗加下划线,效果如下图:

END

时间: 2024-12-29 11:06:58

C# DataGridView 对指定行文字加粗实现阅读标记的相关文章

实现多行文字对齐的原理

多行文字对齐的现象 之前已经实现过多行文字对齐的方法,实现方法详见:多行文字对齐的实现方法,多行文字兼容IE6的关键就是一个空标签<i></i>, 下面我们来看一看不加i标签之前IE6下显示的效果: 而chrome下的效果: 加下i标签后,IE6下的显示效果: 可见在现代浏览器中,对于有没有i标签是没有影响的,为什么加上这个标签之后,IE6就可以实现多行文字对齐了呢? 多行文字对齐的原理 在盒子模型中,父盒子line-height的高度是由子盒子中高度最高的那个盒子决定的,在本例中

ASP.NET 导出Excel时,某单元格内一部分文字加粗加下划线

一.简述 在项目中的某个导出Excel的功能就需要在某个单元格中使一部分文字加粗和加下划线. 二.内容 在这个导出Excel的功能里用到了 Microsoft.Office.Interop.Excel 这个类库. 然后操作单元格: Microsoft.Office.Interop.Excel.Range cells = (Microsoft.Office.Interop.Excel.Range)xlsWorkSheet.Cells; cells["1", "A"]

ExtJS4.2 Grid知识点四:改变表格Grid行文字颜色,划过Grid行时文字变粗

在ExtJS4.2 Grid知识点一:改变表格Grid单元格文字颜色一文中讲解了如何改变单元格中文字颜色,接下来在本章学习如何改变Grid中整行文字的颜色,这样就不需要为每列单独定义renderer函数,显示结果如图片: 在线演示  /  示例代码 实现方式是在Grid中设置viewConfig属性的getRowClass函数,函数参数列表如下: record: 当前待渲染行数据Model,类型为:Ext.data.Model rowIndex: 当前待渲染行数,类型为:Number rowPa

sed 指定行范围匹配(转)

sed -n '5,10{/pattern/p}' file sed是一个非交互性性文本编辑器,它编辑文件或标准输入 导出的文件拷贝.标准输入可能是来自键盘.文件重定向.字符串或变量,或者是一个管道文件.sed可以随意编辑小或大的文件,有许多sed命令用来编辑. 删除,并允许做这项工作时不在现场.sed一次性处理所有改变,因而变得很有效,对用户来说,最重要的是节 省了时间.sed必须通过行号和正则表达式指定要改变的文本行 sed怎样读取数据:sed从文件的一个文本行或从标准输入的几种格式中读取数

Extjs将gird中指定行的复选框勾选

在Extjs中,可以通过 selType添加复选框 Ext.define('ConnGrid', { title:'关联', extend: 'Ext.grid.Panel', xtype: 'checkbox-selection', store: connStore, selType: 'checkboxmodel', //复选框 ....此处省略... } ) var connGrid = Ext.create('ConnGrid'); 如果想要在表格加载数据时自动指定符合某个条件的数据自动

Delphi 快速读取TXT 指定行的数据

继上次的问题.在提取了大量的Email 数据后.现在读取数据成了一个问题.今天我取过1~100w的数据.明天我要取100w~200w的数据.在不用数据库的情况下,我搞了一个下午.Delphi Tstringlist 和 textfile 的简单读取是满足不了的.Tstringlist加载不了大数据.普通的textfile 读取指定行,必须循环count到指定行. 想了一下午,然后想到另类点的解决方法.先对齐数据,每行规定一样的长度.比如每行是 255字节.那么100w行就是 255*100w.直

Bootstrap 3之美03-独立行,文字环绕,图片自适应,隐藏元素

本篇主要包括: ■  添加独立的一行■  文字环绕■  图片自适应■  隐藏元素 添加独立的一行 在id为body的section和id为main的section之间,添加2张图片. 我们发现,新加的2张图片把主体内容挤到了右侧. 那么,我们如何处理新加的2张图片呢?--我们不太可能用container,因为它是页面布局层面的类名.但我们可以把这2张图片放在class名为row的div中. 我们还可以加更多的图片. 现在的图片还没有居中.考虑到总共有12个单元格,而4张图片只占了8个单元格,还空

多行文字实现垂直居中 css3

用到的属性: display:table-cell; verical-align:middle; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

文字标注,多行文字操作文字标注

文字标注,多行文字操作文字标注.CAD制图设计工作中,常常会需要对CAD图纸进行文字标注.那么该如何进行文字标注呢?今天小编就给大家具体演示一下,文字标注,多行文字操作文字标注.演示步骤如下: 步骤一:首先,我们在浏览器里搜索迅捷CAD编辑器专业版下载安装到电脑端. 步骤二:运行软件,在软件底部命令框中输入ST指令,点击回车键或者空格键,打开文字样式. 步骤三:在文字样式里新增一个新的样式,选择合适的宽度和高度,选择字体后,点击确定套用. 步骤四:点击CAD软件界面顶部的"A"多行文字