问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于datagird根据条件改变多行颜色的问题。

发布网友 发布时间:2022-11-19 18:08

我来回答

4个回答

热心网友 时间:2024-10-13 08:53

我帮你改写了,你自己去试一下吧:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
namespace winCh03Demo
{
///<summary>
/// BackColorForm 的摘要描述。
///</summary>
public class BackColorForm : System.Windows.Forms.Form
{
//定义DataGridColoredTextBoxColumn类
public class DataGridColoredTextBoxColumn : DataGridTextBoxColumn
{
//利用DataView来传递当前DataGrid中的数据
public DataView dv = null;

//重写Paint
protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
{
try
{
dv=((DataRowView)source.Current).DataView ;
//判断DataGrid中每行第一列的数据是否为如下的字符串
switch( dv[rowNum].Row[1].ToString() )
{
case "刘德华" : backBrush = Brushes.Red; break;//改变颜色
case "李白" : backBrush = Brushes.Brown; break;//改变颜色
case "欧阳震华 " : backBrush = Brushes.Orange; break;//改变颜色
case "张家辉" : backBrush = Brushes.YellowGreen; break;//改变颜色
//还可以有其他选择!
default : break;
}
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
finally
{
//调用基类的Paint方法
base.Paint (g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
}
}
}
private System.Windows.Forms.DataGrid dataGrid;
private SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=sa;database=pubs");
SqlDataAdapter sda;

///<summary>
///设计工具所需的变数。
///</summary>
private System.ComponentModel.Container components = null;

public BackColorForm()
{
//
// Windows Form 设计工具支持的必要项
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 呼叫之后加入任何建构函式程序代码
//
}

///<summary>
///清除任何使用中的资源。
///</summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form 设计工具产生的程序代码
///<summary>
///此为设计工具支持所必须的方法 - 请勿使用程序代码编辑器修改
///这个方法的内容。
///</summary>
private void InitializeComponent()
{
this.dataGrid = new System.Windows.Forms.DataGrid();
((System.ComponentModel.ISupportInitialize)(this.dataGrid)).BeginInit();
this.SuspendLayout();
//
// dataGrid
//
this.dataGrid.DataMember = "";
this.dataGrid.Dock = System.Windows.Forms.DockStyle.Fill;
this.dataGrid.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGrid.Location = new System.Drawing.Point(0, 0);
this.dataGrid.Name = "dataGrid";
this.dataGrid.Size = new System.Drawing.Size(350, 248);
this.dataGrid.TabIndex = 0;
this.dataGrid.Paint += new System.Windows.Forms.PaintEventHandler(this.dataGrid_Paint);
//
// BackColorForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(350, 248);
this.Controls.Add(this.dataGrid);
this.Name = "BackColorForm";
this.Text = "BackColorForm";
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGrid)).EndInit();
this.ResumeLayout(false);

}
#endregion

///<summary>
///应用程序的主进入点。
///</summary>
[STAThread]
static void Main()
{
Application.Run(new BackColorForm());
}

#region User Variable
private DataTable UserTable = null;
private DataView UserView = null;
#endregion

private void Form1_Load(object sender, System.EventArgs e)
{
try
{
initSQlData();
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
}

private void initSQlData()
{
//通过试图绑定
sda=new SqlDataAdapter("select * from student",conn);
UserTable =new DataTable();
sda.Fill(UserTable);
//使用自定义列样式
DataGridTableStyle dgts=new DataGridTableStyle();
dgts.MappingName =UserTable.TableName;
//循环获得列名
for(int i=0;i<UserTable.Columns.Count;i++ )
{
DataGridColoredTextBoxColumn dgcbc=new DataGridColoredTextBoxColumn();
dgcbc.MappingName =UserTable.Columns[i].ColumnName;
dgts.GridColumnStyles.Add(dgcbc);
}
//跟datagrid控件绑定
dataGrid.TableStyles.Add(dgts);
UserView=UserTable.DefaultView;
dataGrid.DataSource =UserView ;

}

private void dataGrid_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{

}

}
}

数据库表如下:
id name age sex
----------- -------------------------------------------------- ----------- --------------------------------------------------
1 李白 23 男
2 莫少冲 48 男
3 郑秀文1 38 女
4 张曼玉 60 女
6 欧阳震华 50 男
7 张家辉 50 男
8 成龙 48 男
9 超女 28 女
10 刘备 23 女
11 刘德华 58 女
12 莫少冲 34 女
13 张学友 34
14 莫文蔚 34 女
16 非常 23 女
17 刘德华 45 男
18 刘德华 12 ddf
19 23 NULL sdf
20 sdd 12 asd

(所影响的行数为 18 行)

热心网友 时间:2024-10-13 08:53

关键就在这里阿
重写了DataGridColoredTextBoxColumn 的paint方法,然后根据你的DataGrid中每行第一列的数据是否为特定的字符串去修改每一行的颜色...
public class DataGridColoredTextBoxColumn : DataGridTextBoxColumn
{
//利用DataView来传递当前DataGrid中的数据
public DataView dv = null;

//重写Paint
protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
{
try
{
//判断DataGrid中每行第一列的数据是否为如下的字符串
switch( dv[rowNum].Row[0].ToString() )
{
case "critical" : backBrush = Brushes.Red; break;//改变颜色
case "major" : backBrush = Brushes.Brown; break;//改变颜色
case "minor" : backBrush = Brushes.Orange; break;//改变颜色
case "warning" : backBrush = Brushes.YellowGreen; break;//改变颜色
default : break;
}
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
finally
{
//调用基类的Paint方法
base.Paint (g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
}
}

热心网友 时间:2024-10-13 08:54

你这个问题的标题和里边讲的内容不符啊,你到底要实现什么功能。
是就是要读取数据库的数据然后显示在DataGird中吗?

热心网友 时间:2024-10-13 08:54

在数据绑定的时候,可以进行判断的
关于datagird根据条件改变多行颜色的问题。

dv=((DataRowView)source.Current).DataView ;//判断DataGrid中每行第一列的数据是否为如下的字符串 switch( dv[rowNum].Row[1].ToString() ){ case "刘德华" : backBrush = Brushes.Red; break;//改变颜色 case "李白" : backBrush = Brushes.Brown; break;//改变颜色 case "欧阳震华 ...

DataGridView中有很多行,我想实现每行颜色的变化!例如:第一行设置为...

DataGridView的属性中有设置奇数行样式的AlternatingRowsDefaultCellStyle。直接在界面设计那里就可以设置。代码都不用写。

请问如何根据datagrid中的一列的值改变行的颜色

for(int i=0;i&lt;ds.Tables[0].Rows.Count;i++){string j=ds.Tables[0].Rows[i].ItemArray[0].ToString();if(Convert.ToInt32(j)&gt;20){this.DataGrid1.Items[i].Cells[0].BackColor=Color.Black;//相应的单元格this.DataGrid1.Items[i].BackColor=Color.Black;//相应的行}}错了,忘...

easyui datagrid 的问题! 改变行的背景颜色。

你的意思是奇数或者偶数行是一个颜色是吧。怎么加统计的?在你的datagrid的定义中,加一个rowStyer属性,下面是官方使用 rowStyler: function(index,row){ if (row.listprice &lt; 30){ return 'background-color:#6293BB;color:#fff;font-weight:bold;'; }}//你就这么改if(index%2==1...

C#中datagridview根据条件显示颜色的问题

这是我手写的,这种方法可以用,要是有哪里有点小问题你找找就可以用 DateTime check_in=DateTime.Now.ToString("yyyy-mm-dd");开始日期 DateTime check_out = 在datagridview取出xszDate值 TimeSpan timeSpan = new TimeSpan();timeSpan = check_out.Subtract(check_in);if(timeSpan == ...

WPF gridControl中满足条件后某行添加不同的颜色

写的时候,需要用到Converter,用于根据条件返回Brush,例如:public class ConditionalBrushConverter : IValueConverter { public object Convert(object value, ...){ if(value ...){ return Brushes.Red;} else if(value ...){ return Brushes.Blue;} ...} } &lt;Style x:Key="ConditionalBackgro...

c#中怎样才能让datagridview中指定的一行或多行变色

//定义画笔,使用颜色是深灰。using (SolidBrush brush = new SolidBrush(Color.DarkGray)){ //利用画笔填充当前行 e.Graphics.FillRectangle(brush, e.RowBounds);//将值重新写回当前行。e.PaintCellsContent(e.ClipBounds);e.Handled = true;} } } catch (Exception ex){ MessageBox.Show(ex...

C#中点击DataGridView列头自动排序后,对单元格所作改变(比如某些行有...

1.在读取数据的时候,设定绑定到了单元格 2.在 CellFormatting(推荐) 事件里改写 如果是1,就需要排序后,重新调用格式设置函数,一一设置 如果是2,应该就不存在这个问题了,因为一般情况下,单元格格式都是随值的变化而变化,这种方式除了是微软推荐外,重点是:节省资源开销,而且灵活自如,速度也不错 ...

请问C#.NET中DataGrid的个别表格变颜色怎么变??

"Score")+"":DataBinder.Eval(Container.DataItem,"Score")%&gt; 这个就行了 这个其实就是 if(){ } else { } 如处理数据库中的1表示男,0表示女 则可用 &lt;%# (DataBinder.Eval(Container.DataItem,"sex").ToString()=="1")?"男":"女"%&gt; 就是 (条件)?成立结果:不成立结果 ...

WPF中dataGrid绑定数据源为dataTable,根据表中的每一行的某个值来设 ...

貌似不能设置行滴背景颜色 可以设置行的文本颜色 (*^__^*) 嘻嘻……&lt;DataGrid ...&lt;DataGrid.Resources&gt; &lt;Setter Property="Foreground" Value="{Binding **}"/&gt; &lt;/DataGrid.Resource&gt; &lt;/DataGrid&gt;

改变花的颜色我的发现 多条件设置不同颜色 条件格式后的颜色怎样去除 按颜色进行条件求和 表格满足条件变颜色 手机软件改变衣服颜色 if函数用颜色作为条件 条件格式颜色 根据颜色区分
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
世界200米短跑比赛游戏介绍 短跑200米,技巧是什么?求体育达人回复。 地瓜藤生药材鉴定 地瓜藤《中华本草》:地瓜藤 ...疼的要死,蛀的快没了,又不敢拿掉,怕影响其他牙。请问怎么办... 卧室内适合养什么树适合卧室的植物 ...而且牙齿不整齐,而且大牙咀齿面黑黑的,怎么 本人今年14岁,蛀牙时间不详,蛀牙严重, 微信对方撤回了我还能看到吗 一打哈欠左耳里面就疼,是怎么了 前几个星期受过伤 YYLabel富文本显示 YYText使用 实现饼图label文字对齐或引导性对齐 做爱只进去了一点点也没射会不会怀孕啊 周公解梦梦见亲人剪头发的预兆 直流电动机空载运行时气隙中主磁场磁密是如何分布的 请问电容运转马达,气隙磁密多大比较合适?太大会发生什么情况? 什么是电动机的气隙长度? 什么是气隙磁场波形系数 大众eos为什么停售了 我想问一下200万摄像头可以看清人脸吗? 阿玛尼AR0585小表盘怎么调 三个表盘分别是干什么用的啊? 梦见月亮中显现出巨大的老虎和龙有什麽征兆吗? 梦到月亮里有只老虎 请问抖音一天可以关注多少人? 我电脑的系统时间改不了了? 系统时间在任务栏时间显示区和BIOS里都改不了,怎么办? 做梦梦到洪水,为了躲洪水跳进河里什么意思 佳能相机夜景拍摄注意事项 微信视频对方怎么一直忙线中,什么情况? delphi 请问在报表中如何让summary band或者group foot 梦见上司接我,什么含义 梦到开车送同事回家,另一个同事来接我 乐源电动车怎么样 杭州乐源饮料有限公司电话是多少? 问一下:乐源小青柠这种饮品能补充VC吗? 小新pro14屏幕摄像头那个板块掉出来了怎么弄 怎样把微信好友全部转移到另一个上? 如何把微信好友的导出到电脑里面? 如何将微信好友转移到另一个? 怎样导用 如何将好友导出来 蓝海电视台是什么台? 蓝海一加一播出 中国大陆的电视台都是国有私营吗? 刘宗勇的介绍 什么样的收音机在国外可以收听到中国广播台的节目 尿频和尿不尽是一个意思么? 轻微前列腺炎症引起的尿频尿急是什么意思? 江西省第十六届运动会开幕式时间