关于datagridview排序后字体颜色丢失问题
来源:互联网 发布:3dmax2012沙发材质数据 编辑:程序博客网 时间:2024/04/29 01:45
如题,在获取DataTable后,跟住每行中的特定字段判断,如果符合要求,则这行字体设为灰色。
1、开始的时候用了简单的datagridview.datasours绑定,如下:(注意:datagridview在下面用dg代替)
dg.DataSource = dt;for (int i = 0; i < dg.Rows.Count; i++) { if (dg.Rows[i].Cells["d_id"].Value.ToString() == "Y") { this.dg.Rows[i].DefaultCellStyle.ForeColor = System.Drawing.Color.Gray; } else this.dg.Rows[i].DefaultCellStyle.ForeColor = System.Drawing.Color.Blue;}
但是点击datagridview每一列的列头进行排序,颜色就会丢失。
然后在网上查找资料,不绑定datagridview.datasours,帮数据格式也传递过去的方法。
将上面dg.DataSource = dt;
改成dtToDgv(dg, dt, 1);//调用下面的函数
public static void dtToDgv(DataGridView dgv, DataTable dt, int needDgvClear) { //直接等于数据源的方法传1;重置的传0;追加时传2;重置为空,则传3 if (dgv == null) { return; } if (needDgvClear == 3) { dgv.Rows.Clear(); dgv.Columns.Clear(); return; } if (dt != null && dt.Rows != null && dt.Rows.Count >= 0) { switch (needDgvClear) { case 0: dgv.Rows.Clear(); dgv.Columns.Clear(); for (int i = 0; i < dt.Columns.Count; i++) { string columnName2 = dt.Columns[i].ColumnName;//DataTable的列名 dgv.Columns.Add(columnName2, columnName2); dgv.Columns[columnName2].ValueType = dt.Columns[i].DataType;//把DataTable列的数据类型传进来 } return; case 1: dgv.Rows.Clear(); dgv.Columns.Clear(); break; case 2: break; default: dgv.Rows.Clear(); dgv.Columns.Clear(); break; } if (needDgvClear == 2) { if (dgv.Columns == null || dgv.Columns.Count < 1) {//追加时,如果原有的数据源本身就是空的,则还是要绘制表头 for (int i = 0; i< dt.Columns.Count; i++) { string columnName2 = dt.Columns[i].ColumnName;//DataTable的列名 dgv.Columns.Add(columnName2, columnName2); dgv.Columns[columnName2].ValueType = dt.Columns[i].DataType;//把DataTable列的数据类型也传进来 } } } else { for (int i = 0; i < dt.Columns.Count; i++) { string columnName2 = dt.Columns[i].ColumnName; dgv.Columns.Add(columnName2,columnName2); dgv.Columns[columnName2].ValueType = dt.Columns[i].DataType; } } for (int j = 0; j < dt.Rows.Count; j++) { dgv.Rows.Add(); for (int f = 0; f < dgv.Columns.Count; f++) { string dgvColumnName_ = dgv.Columns[f].HeaderText; dgv[dgvColumnName_, dgv.Rows.Count - 1 - (dgv.AllowUserToAddRows ? 1 : 0)].Value = dt.Rows[j][dgvColumnName_]; } } } }但问题是,我想实现datagridview的_MouseDoubleClick功能,而这个方法并没有进行数据的绑定,即没有dg.DataSource=dt;这一步,所以后续操作比较麻烦。
3、最后决定用_DataBindingComplete修改颜色
private void dg_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) { DataGridView curDgv = (DataGridView)sender; foreach (DataGridViewRow Row in curDgv.Rows) { if (Row != null) { foreach (DataGridViewCell cell in Row.Cells) { if (curDgv.Columns[cell.ColumnIndex].DataPropertyName.Equals("d_id")) { if (cell.Value.ToString().Equals("Y")) { Row.DefaultCellStyle.ForeColor = Color.Gray; } else { Row.DefaultCellStyle.ForeColor = Color.Blue; } } } } } }
这样,既能使得排序的时候颜色不丢失,又能在_MouseDoubleClick的时候实现数据传递,不用再查询一次数据库。
- 关于datagridview排序后字体颜色丢失问题
- svg文本动态改变后字体设置丢失问题
- 关于richtextbox中的字体颜色问题
- 关于Radiobutton 改变字体颜色问题
- iOS 关于placeholder字体,颜色问题
- 关于设置textview字体颜色问题
- 【转】DataGridView选中一行后,保持前景色(颜色,字体)
- DataGridView的Cell的字体颜色变化
- 解决DataGridView绑定List后不能排序的问题
- 解决DataGridView绑定List后不能排序的问题
- Comparator实现排序后,返回0值数据丢失问题
- 关于flexpaper源码重新编译后样式丢失的问题
- 关于eclispe logcat丢失后无法显示问题
- 关于XILINX SDK软件字体颜色的问题
- [iOS]关于UILabel显示多颜色字体的问题
- TABBAR选中后字体颜色
- datagridview 列排序问题
- datagridview 列排序问题
- 敏捷组织转型之路-杨锋镝
- 解决VS2008 开发Wince应用程序项目生成速度慢的问题
- ACE编译运行错误解决
- CMD下修改IP地址!
- 分享个将excel导为DB数据的方法
- 关于datagridview排序后字体颜色丢失问题
- Comparable和Comparator比较
- IOS开发之路-Objective-C 继承,多态
- hdu 4628 Pieces (状态压缩+二进制枚举+dp)
- cocos2dx引擎 游戏开头logo自动跳转(定时器的使用)
- The BalsamiqMockups.cfg Configuration File
- HDOJ题目分类
- C语言对于-0和+0在内存中的表示方法
- 遥控器需要修改keycodelabels.h