手表网站制作照片营销型网站展示

张小明 2026/1/11 8:26:13
手表网站制作照片,营销型网站展示,如何在各网站做推广,上海网站定制设计目录 一、前置准备 二、DataGridView 常用单元格类型#xff08;基础必掌握#xff09; 1. 文本框单元格#xff08;DataGridViewTextBoxColumn#xff09; 2. 复选框单元格#xff08;DataGridViewCheckBoxColumn#xff09; 3. 下拉框单元格#xff08;DataGridV…目录一、前置准备二、DataGridView 常用单元格类型基础必掌握1. 文本框单元格DataGridViewTextBoxColumn2. 复选框单元格DataGridViewCheckBoxColumn3. 下拉框单元格DataGridViewComboBoxColumn4. 按钮单元格DataGridViewButtonColumn5. 链接单元格DataGridViewLinkColumn6. 图片单元格DataGridViewImageColumn初始化测试数据三、高频自定义绘制 / 样式案例核心实战案例 1根据单元格值设置样式背景 / 字体色案例 2单元格内绘制进度条案例 3单元格绘制状态图标对勾 / 叉号案例 4单元格文本自动换行案例 5条件禁用单元格编辑四、初学者注意事项五、完整代码整合总结DataGridView 是 WinForm 中最常用的数据展示控件掌握其单元格类型和自定义绘制技巧是初学者的核心需求。本文从基础单元格类型入手结合 5 个高频实战案例详细讲解用法和实现思路代码可直接复制运行。一、前置准备创建 WinForm 项目.NET Framework 4.8 为例兼容多数初学者环境在窗体上拖放一个DataGridView控件命名为dgvDemo所有代码均写在Form1.cs中核心逻辑在Form_Load事件和自定义事件中。二、DataGridView 常用单元格类型基础必掌握DataGridView 内置多种单元格类型对应不同的交互 / 展示场景以下是最常用的 6 种1. 文本框单元格DataGridViewTextBoxColumn最基础的单元格类型用于显示 / 编辑文本、数字等默认单元格类型。private void InitBasicColumns() { // 1. 文本列姓名 DataGridViewTextBoxColumn colName new DataGridViewTextBoxColumn(); colName.Name colName; // 列名后台标识 colName.HeaderText 姓名; // 表头显示文本 colName.Width 80; // 列宽 colName.DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter; // 居中 dgvDemo.Columns.Add(colName); // 2. 文本列分数 DataGridViewTextBoxColumn colScore new DataGridViewTextBoxColumn(); colScore.Name colScore; colScore.HeaderText 分数; colScore.Width 80; dgvDemo.Columns.Add(colScore); }2. 复选框单元格DataGridViewCheckBoxColumn用于显示 / 编辑布尔值是 / 否、勾选 / 未勾选比如 “是否及格”。// 3. 复选框列是否及格 DataGridViewCheckBoxColumn colPass new DataGridViewCheckBoxColumn(); colPass.Name colPass; colPass.HeaderText 是否及格; colPass.Width 80; colPass.TrueValue true; // 勾选对应值 colPass.FalseValue false; // 未勾选对应值 dgvDemo.Columns.Add(colPass);3. 下拉框单元格DataGridViewComboBoxColumn用于限定可选值的下拉选择比如 “班级”。// 4. 下拉框列班级 DataGridViewComboBoxColumn colClass new DataGridViewComboBoxColumn(); colClass.Name colClass; colClass.HeaderText 班级; colClass.Width 100; // 添加下拉选项 colClass.Items.AddRange(new string[] { 一班, 二班, 三班 }); // 设置默认值 colClass.DefaultCellStyle.NullValue 一班; dgvDemo.Columns.Add(colClass);4. 按钮单元格DataGridViewButtonColumn单元格显示按钮点击可触发事件比如 “详情” 按钮。// 5. 按钮列操作 DataGridViewButtonColumn colOperate new DataGridViewButtonColumn(); colOperate.Name colOperate; colOperate.HeaderText 操作; colOperate.Width 80; colOperate.Text 详情; // 按钮显示文本 colOperate.UseColumnTextForButtonValue true; // 启用按钮文本 dgvDemo.Columns.Add(colOperate); // 按钮点击事件需订阅 dgvDemo.CellClick (sender, e) { // 判断是否点击了按钮列 if (e.ColumnIndex dgvDemo.Columns[colOperate].Index e.RowIndex 0) { // 获取当前行数据 string name dgvDemo.Rows[e.RowIndex].Cells[colName].Value?.ToString() ?? ; MessageBox.Show($查看 {name} 的详情); } };5. 链接单元格DataGridViewLinkColumn显示超链接样式文本点击可触发事件比如 “查看资料”。// 6. 链接列查看资料 DataGridViewLinkColumn colLink new DataGridViewLinkColumn(); colLink.Name colLink; colLink.HeaderText 资料; colLink.Width 80; colLink.Text 查看; colLink.UseColumnTextForLinkValue true; dgvDemo.Columns.Add(colLink); // 链接点击事件 dgvDemo.CellContentClick (sender, e) { if (e.ColumnIndex dgvDemo.Columns[colLink].Index e.RowIndex 0) { string name dgvDemo.Rows[e.RowIndex].Cells[colName].Value?.ToString() ?? ; MessageBox.Show($打开 {name} 的资料链接); } };6. 图片单元格DataGridViewImageColumn用于显示图片比如头像、状态图标支持本地图片、资源图片。// 7. 图片列头像 DataGridViewImageColumn colAvatar new DataGridViewImageColumn(); colAvatar.Name colAvatar; colAvatar.HeaderText 头像; colAvatar.Width 60; // 设置默认图片可选比如项目资源中的图片 // colAvatar.DefaultCellStyle.NullValue Properties.Resources.default_avatar; dgvDemo.Columns.Add(colAvatar);初始化测试数据private void InitTestData() { // 清空原有数据 dgvDemo.Rows.Clear(); // 添加测试行 dgvDemo.Rows.Add(张三, 95, true, 一班, , Properties.Resources.default_avatar); dgvDemo.Rows.Add(李四, 58, false, 二班, , Properties.Resources.default_avatar); dgvDemo.Rows.Add(王五, 88, true, 三班, , Properties.Resources.default_avatar); }在Form_Load中调用初始化方法private void Form1_Load(object sender, EventArgs e) { // 初始化基础列 InitBasicColumns(); // 初始化测试数据 InitTestData(); }三、高频自定义绘制 / 样式案例核心实战内置单元格类型满足基础需求实际开发中常需自定义样式 / 绘制以下是 5 个最常用的案例。案例 1根据单元格值设置样式背景 / 字体色需求分数≥60 分的单元格背景色为绿色、字体白色60 分背景色红色、字体白色等于 60 分黄色。核心事件CellFormatting单元格格式化时触发// 第一步订阅CellFormatting事件Form_Load中添加 dgvDemo.CellFormatting DgvDemo_CellFormatting; // 第二步实现事件逻辑 private void DgvDemo_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { // 排除表头行e.RowIndex 0和非分数列 if (e.RowIndex 0 || dgvDemo.Columns[e.ColumnIndex].Name ! colScore) return; // 获取分数值处理空值 if (int.TryParse(e.Value?.ToString(), out int score)) { // 定义样式对象 DataGridViewCellStyle style new DataGridViewCellStyle(); style.Alignment DataGridViewContentAlignment.MiddleCenter; // 根据分数设置样式 if (score 60 score 100) { style.BackColor Color.LightGreen; // 背景色 style.ForeColor Color.White; // 字体色 style.Font new Font(微软雅黑, 9, FontStyle.Bold); // 加粗字体 } else if (score 60) { style.BackColor Color.LightCoral; style.ForeColor Color.White; style.Font new Font(微软雅黑, 9, FontStyle.Bold); } else if (score 100) { style.BackColor Color.Gold; style.ForeColor Color.Red; style.Font new Font(微软雅黑, 9, FontStyle.Bold | FontStyle.Italic); } // 应用样式到单元格 dgvDemo.Rows[e.RowIndex].Cells[e.ColumnIndex].Style style; } }案例 2单元格内绘制进度条需求将分数转换为进度条比如 100 分对应 100% 进度直观展示分数占比。核心事件CellPainting单元格绘制时触发自定义绘制图形// 第一步订阅CellPainting事件Form_Load中添加 dgvDemo.CellPainting DgvDemo_CellPainting; // 第二步实现进度条绘制逻辑 private void DgvDemo_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { // 排除表头、非分数列、空值 if (e.RowIndex 0 || dgvDemo.Columns[e.ColumnIndex].Name ! colScore || e.Value null) return; // 1. 先清空单元格原有绘制内容 e.PaintBackground(e.CellBounds, true); // 绘制背景 e.PaintContent(e.CellBounds); // 绘制原有内容可选这里我们要覆盖可注释 // 2. 解析分数计算进度0-100 → 0-1 if (int.TryParse(e.Value.ToString(), out int score)) { float progress Math.Min(score / 100f, 1f); // 限制最大进度为100% // 3. 定义进度条区域留出边距 Rectangle progressRect new Rectangle( e.CellBounds.X 5, // 左偏移5px e.CellBounds.Y 5, // 上偏移5px (int)(e.CellBounds.Width - 10) * progress, // 进度条宽度 e.CellBounds.Height - 10 // 进度条高度 ); // 4. 绘制进度条背景灰色 using (Brush bgBrush new SolidBrush(Color.LightGray)) { e.Graphics.FillRectangle(bgBrush, e.CellBounds.X 5, e.CellBounds.Y 5, e.CellBounds.Width - 10, e.CellBounds.Height - 10); } // 5. 绘制进度条根据分数选颜色 Color progressColor score 60 ? Color.Green : Color.Red; using (Brush progressBrush new SolidBrush(progressColor)) { e.Graphics.FillRectangle(progressBrush, progressRect); } // 6. 绘制分数文本居中 TextRenderer.DrawText( e.Graphics, ${score}分, e.CellStyle.Font, e.CellBounds, Color.Black, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter ); } // 7. 阻止系统默认绘制避免重叠 e.Handled true; }案例 3单元格绘制状态图标对勾 / 叉号需求“是否及格” 列不显示复选框改为绘制对勾√/ 叉号×图标更直观。前置准备两个图标对勾、叉号放入项目资源Properties → Resources.resx。// 第一步订阅CellPainting事件复用案例2的事件新增逻辑 private void DgvDemo_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { // 案例2进度条逻辑保留 // ...同上 // 案例3绘制状态图标 // 处理“是否及格”列 if (e.RowIndex 0 dgvDemo.Columns[e.ColumnIndex].Name colPass) { e.PaintBackground(e.CellBounds, true); // 绘制背景 // 获取是否及格的值 bool isPass false; if (e.Value ! null bool.TryParse(e.Value.ToString(), out bool val)) { isPass val; } // 选择图标对勾/叉号 Image icon isPass ? Properties.Resources.check : Properties.Resources.cross; if (icon ! null) { // 计算图标绘制位置居中 int x e.CellBounds.X (e.CellBounds.Width - icon.Width) / 2; int y e.CellBounds.Y (e.CellBounds.Height - icon.Height) / 2; // 绘制图标 e.Graphics.DrawImage(icon, x, y, icon.Width, icon.Height); } e.Handled true; // 阻止默认绘制 } }案例 4单元格文本自动换行需求长文本单元格比如 “备注” 列自动换行显示避免文本被截断。// 1. 先添加备注列 private void AddRemarkColumn() { DataGridViewTextBoxColumn colRemark new DataGridViewTextBoxColumn(); colRemark.Name colRemark; colRemark.HeaderText 备注; colRemark.Width 150; dgvDemo.Columns.Add(colRemark); // 2. 设置换行样式 colRemark.DefaultCellStyle.WrapMode DataGridViewTriState.True; // 启用换行 dgvDemo.AutoSizeRowsMode DataGridViewAutoSizeRowsMode.AllCells; // 行高自动适应内容 } // 3. 添加测试数据长文本 dgvDemo.Rows[张三, 95, true, 一班, , Properties.Resources.default_avatar, 该学生成绩优异多次获得班级第一名擅长数学和英语];案例 5条件禁用单元格编辑需求分数≥90 分的单元格禁止编辑保护高分数据。核心事件CellBeginEdit单元格开始编辑时触发取消编辑// 第一步订阅CellBeginEdit事件Form_Load中添加 dgvDemo.CellBeginEdit DgvDemo_CellBeginEdit; // 第二步实现禁用逻辑 private void DgvDemo_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { // 只处理分数列 if (dgvDemo.Columns[e.ColumnIndex].Name ! colScore) return; // 获取分数值 if (int.TryParse(dgvDemo.Rows[e.RowIndex].Cells[e.ColumnIndex].Value?.ToString(), out int score)) { // 分数≥90取消编辑 if (score 90) { e.Cancel true; MessageBox.Show(高分数据禁止编辑); } } }四、初学者注意事项事件触发时机CellFormatting单元格显示 / 刷新时触发适合改样式CellPainting单元格绘制时触发适合自定义图形CellBeginEdit单元格进入编辑状态前触发适合控制编辑权限。性能优化避免在CellPainting中频繁创建对象比如 Brush、Font可缓存复用大量数据时关闭自动列宽 / 行高AutoSizeColumnsMode None。空值处理所有单元格值需判断null避免空引用异常比如e.Value?.ToString()。样式优先级单元格样式 行样式 列样式 控件默认样式。五、完整代码整合将以上代码整合到Form1.cs可直接运行using System; using System.Drawing; using System.Windows.Forms; namespace DataGridViewDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // 初始化列 InitBasicColumns(); AddRemarkColumn(); // 初始化数据 InitTestData(); // 订阅事件 dgvDemo.CellFormatting DgvDemo_CellFormatting; dgvDemo.CellPainting DgvDemo_CellPainting; dgvDemo.CellBeginEdit DgvDemo_CellBeginEdit; dgvDemo.CellClick DgvDemo_CellClick; dgvDemo.CellContentClick DgvDemo_CellContentClick; } // 初始化基础列 private void InitBasicColumns() { // 1. 文本列姓名 DataGridViewTextBoxColumn colName new DataGridViewTextBoxColumn(); colName.Name colName; colName.HeaderText 姓名; colName.Width 80; colName.DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter; dgvDemo.Columns.Add(colName); // 2. 文本列分数 DataGridViewTextBoxColumn colScore new DataGridViewTextBoxColumn(); colScore.Name colScore; colScore.HeaderText 分数; colScore.Width 80; dgvDemo.Columns.Add(colScore); // 3. 复选框列是否及格 DataGridViewCheckBoxColumn colPass new DataGridViewCheckBoxColumn(); colPass.Name colPass; colPass.HeaderText 是否及格; colPass.Width 80; colPass.TrueValue true; colPass.FalseValue false; dgvDemo.Columns.Add(colPass); // 4. 下拉框列班级 DataGridViewComboBoxColumn colClass new DataGridViewComboBoxColumn(); colClass.Name colClass; colClass.HeaderText 班级; colClass.Width 100; colClass.Items.AddRange(new string[] { 一班, 二班, 三班 }); colClass.DefaultCellStyle.NullValue 一班; dgvDemo.Columns.Add(colClass); // 5. 按钮列操作 DataGridViewButtonColumn colOperate new DataGridViewButtonColumn(); colOperate.Name colOperate; colOperate.HeaderText 操作; colOperate.Width 80; colOperate.Text 详情; colOperate.UseColumnTextForButtonValue true; dgvDemo.Columns.Add(colOperate); // 6. 链接列查看资料 DataGridViewLinkColumn colLink new DataGridViewLinkColumn(); colLink.Name colLink; colLink.HeaderText 资料; colLink.Width 80; colLink.Text 查看; colLink.UseColumnTextForLinkValue true; dgvDemo.Columns.Add(colLink); // 7. 图片列头像 DataGridViewImageColumn colAvatar new DataGridViewImageColumn(); colAvatar.Name colAvatar; colAvatar.HeaderText 头像; colAvatar.Width 60; dgvDemo.Columns.Add(colAvatar); } // 添加备注列换行演示 private void AddRemarkColumn() { DataGridViewTextBoxColumn colRemark new DataGridViewTextBoxColumn(); colRemark.Name colRemark; colRemark.HeaderText 备注; colRemark.Width 150; colRemark.DefaultCellStyle.WrapMode DataGridViewTriState.True; dgvDemo.Columns.Add(colRemark); dgvDemo.AutoSizeRowsMode DataGridViewAutoSizeRowsMode.AllCells; } // 初始化测试数据 private void InitTestData() { dgvDemo.Rows.Clear(); dgvDemo.Rows.Add(张三, 95, true, 一班, , Properties.Resources.default_avatar, 该学生成绩优异多次获得班级第一名擅长数学和英语); dgvDemo.Rows.Add(李四, 58, false, 二班, , Properties.Resources.default_avatar, 基础薄弱建议加强语文和数学的学习); dgvDemo.Rows.Add(王五, 88, true, 三班, , Properties.Resources.default_avatar, 成绩中等稳定性不足需多刷题); dgvDemo.Rows.Add(赵六, 100, true, 一班, , Properties.Resources.default_avatar, 满分学霸综合能力强); } // 案例1根据值设置样式 private void DgvDemo_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (e.RowIndex 0 || dgvDemo.Columns[e.ColumnIndex].Name ! colScore) return; if (int.TryParse(e.Value?.ToString(), out int score)) { DataGridViewCellStyle style new DataGridViewCellStyle(); style.Alignment DataGridViewContentAlignment.MiddleCenter; if (score 60 score 100) { style.BackColor Color.LightGreen; style.ForeColor Color.White; style.Font new Font(微软雅黑, 9, FontStyle.Bold); } else if (score 60) { style.BackColor Color.LightCoral; style.ForeColor Color.White; style.Font new Font(微软雅黑, 9, FontStyle.Bold); } else if (score 100) { style.BackColor Color.Gold; style.ForeColor Color.Red; style.Font new Font(微软雅黑, 9, FontStyle.Bold | FontStyle.Italic); } dgvDemo.Rows[e.RowIndex].Cells[e.ColumnIndex].Style style; } } // 案例23进度条图标绘制 private void DgvDemo_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { // 案例2绘制进度条分数列 if (e.RowIndex 0 dgvDemo.Columns[e.ColumnIndex].Name colScore e.Value ! null) { e.PaintBackground(e.CellBounds, true); if (int.TryParse(e.Value.ToString(), out int score)) { float progress Math.Min(score / 100f, 1f); Rectangle progressRect new Rectangle( e.CellBounds.X 5, e.CellBounds.Y 5, (int)(e.CellBounds.Width - 10) * progress, e.CellBounds.Height - 10 ); using (Brush bgBrush new SolidBrush(Color.LightGray)) { e.Graphics.FillRectangle(bgBrush, e.CellBounds.X 5, e.CellBounds.Y 5, e.CellBounds.Width - 10, e.CellBounds.Height - 10); } Color progressColor score 60 ? Color.Green : Color.Red; using (Brush progressBrush new SolidBrush(progressColor)) { e.Graphics.FillRectangle(progressBrush, progressRect); } TextRenderer.DrawText( e.Graphics, ${score}分, e.CellStyle.Font, e.CellBounds, Color.Black, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter ); } e.Handled true; } // 案例3绘制状态图标是否及格列 if (e.RowIndex 0 dgvDemo.Columns[e.ColumnIndex].Name colPass) { e.PaintBackground(e.CellBounds, true); bool isPass false; if (e.Value ! null bool.TryParse(e.Value.ToString(), out bool val)) { isPass val; } Image icon isPass ? Properties.Resources.check : Properties.Resources.cross; if (icon ! null) { int x e.CellBounds.X (e.CellBounds.Width - icon.Width) / 2; int y e.CellBounds.Y (e.CellBounds.Height - icon.Height) / 2; e.Graphics.DrawImage(icon, x, y, icon.Width, icon.Height); } e.Handled true; } } // 案例5条件禁用编辑 private void DgvDemo_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { if (dgvDemo.Columns[e.ColumnIndex].Name ! colScore) return; if (int.TryParse(dgvDemo.Rows[e.RowIndex].Cells[e.ColumnIndex].Value?.ToString(), out int score)) { if (score 90) { e.Cancel true; MessageBox.Show(高分数据禁止编辑); } } } // 按钮列点击事件 private void DgvDemo_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex dgvDemo.Columns[colOperate].Index e.RowIndex 0) { string name dgvDemo.Rows[e.RowIndex].Cells[colName].Value?.ToString() ?? ; MessageBox.Show($查看 {name} 的详情); } } // 链接列点击事件 private void DgvDemo_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex dgvDemo.Columns[colLink].Index e.RowIndex 0) { string name dgvDemo.Rows[e.RowIndex].Cells[colName].Value?.ToString() ?? ; MessageBox.Show($打开 {name} 的资料链接); } } } }总结本文覆盖了 DataGridView 最常用的单元格类型和 5 个高频自定义场景初学者可先掌握基础单元格类型再逐步理解自定义绘制的核心事件。建议先复制代码运行再逐行修改参数比如颜色、列宽、判断条件加深对逻辑的理解。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

哪里有免费网站可以看做网站的具体需求

SuperCom串口调试工具终极指南:从入门到精通的完整教程 【免费下载链接】SuperCom SuperCom 是一款串口调试工具 项目地址: https://gitcode.com/gh_mirrors/su/SuperCom 还在为复杂的串口调试而烦恼吗?SuperCom串口调试工具将彻底改变你的工作方…

张小明 2026/1/7 20:58:02 网站建设

文化书院网站建设方案医院网站建设要求

导语 【免费下载链接】DeepSeek-V3 DeepSeek-V3:强大开源的混合专家模型,671B总参数,激活37B,采用多头潜在注意力机制与DeepSeekMoE架构,训练高效、成本低,性能卓越,开源界表现领先,…

张小明 2026/1/7 20:57:59 网站建设

建设网上银行登录优化关键词排名软件

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向初学者的HBuilderX教学项目,包含从安装配置到创建第一个网页的完整流程。项目应包含简单的HTML页面,有标题、段落和图片等基础元素。要求提供分…

张小明 2026/1/7 20:57:56 网站建设

同城分类信息网站建设广州软件开发招聘

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 制作一个极简的Pure-Admin入门示例,只需实现一个文章管理模块。包含文章列表展示(带分页)、文章新增和编辑功能。前端使用Vue3组合式API,后端对接JSONPlaceh…

张小明 2026/1/7 11:31:58 网站建设

网站开发制作步骤图网站建设 主机托管

面试数据库八股文五问五答第三期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的! ⭐点赞⭐收藏⭐不迷路!⭐ 1)MyIsAm 和 InnoDB 的区别 事务支持:MyISAM不支持事务&a…

张小明 2026/1/7 7:32:57 网站建设

肃宁网站建设公司网站平台方案

百度Qianfan-VL-8B深度解析:80亿参数如何重塑企业多模态AI应用格局 【免费下载链接】Qianfan-VL-8B 项目地址: https://ai.gitcode.com/hf_mirrors/baidu/Qianfan-VL-8B 在人工智能技术日新月异的今天,企业级多模态应用正迎来前所未有的发展机遇…

张小明 2026/1/9 5:15:47 网站建设