关于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<ds.Tables[0].Rows.Count;i++){string j=ds.Tables[0].Rows[i].ItemArray[0].ToString();if(Convert.ToInt32(j)>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 < 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;} ...} } <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")%> 这个就行了 这个其实就是 if(){ } else { } 如处理数据库中的1表示男,0表示女 则可用 <%# (DataBinder.Eval(Container.DataItem,"sex").ToString()=="1")?"男":"女"%> 就是 (条件)?成立结果:不成立结果 ...
WPF中dataGrid绑定数据源为dataTable,根据表中的每一行的某个值来设 ...
貌似不能设置行滴背景颜色 可以设置行的文本颜色 (*^__^*) 嘻嘻……<DataGrid ...<DataGrid.Resources> <Setter Property="Foreground" Value="{Binding **}"/> </DataGrid.Resource> </DataGrid>