gridcontrol列绑定的是string,其中某个单元格要用coloredit控件怎么办

jiawaziaixialing 2014-09-17 03:04:23
gridcontrol列绑定的类型是string,但其中一单元格要用coloredit控件来设置颜色,保存时依然转换为string保存,这该怎么搞
...全文
204 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
有一段代码搞错了,因为只有一列Unbound列,所以运行是正确的。。。 正确的代码如下:
private void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
{
	if (e.Column == gridColumn3)
	{
		if (e.IsSetData)
		{
			var aVal = (e.Row as DataRowView)["A"].ToString();
			int i;
			if (int.TryParse(aVal, out i))
			{

				if (i % 2 == 0)
				{
					var color = (Color)e.Value;
					(e.Row as DataRowView)["B"] = color.ToArgb().ToString();
				}
				else
				{
					(e.Row as DataRowView)["B"] = e.Value.ToString();
				}
			}
		}
		if (e.IsGetData)
		{
			var aVal = (e.Row as DataRowView)["A"].ToString();
			int i;
			if (int.TryParse(aVal, out i))
			{
				var bVal = (e.Row as DataRowView)["B"];
				if (i % 2 == 0)
				{
					var color = Color.FromArgb(Convert.ToInt32(bVal));
					e.Value = color;
				}
				else
				{
					e.Value = bVal.ToString();
				}
			}
		}
	}
}
  • 打赏
  • 举报
回复
public partial class Form1
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
var dt = new DataTable();
dt.Columns.AddRange(new []{new DataColumn("A", typeof(int)), new DataColumn("B", typeof(string)), });
dt.Rows.Add(1, "white");
dt.Rows.Add(2, "0");
dt.Rows.Add(3, "blue");
dt.Rows.Add(4, "0");
dt.Rows.Add(5, "blue");
dt.Rows.Add(6, "0");
dt.Rows.Add(7, "pink");
dt.Rows.Add(8, "0");

gridControl1.DataSource = dt;
}

private void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
{
if (e.Column == gridColumn3)
{

if (e.IsSetData)
{
var aVal = (e.Row as DataRowView)["A"].ToString();
int i;
if (int.TryParse(aVal, out i))
{

if (i % 2 == 0)
{
var color = (Color)e.Value;
(e.Row as DataRowView)["B"] = color.ToArgb().ToString();
}
else
{
(e.Row as DataRowView)["B"] = e.Value.ToString();
}
}
}
}
if (e.IsGetData)
{
var aVal = (e.Row as DataRowView)["A"].ToString();
int i;
if (int.TryParse(aVal, out i))
{
var bVal = (e.Row as DataRowView)["B"];
if (i % 2 == 0)
{
var color = Color.FromArgb(Convert.ToInt32(bVal));
e.Value = color;
}
else
{
e.Value = bVal.ToString();
}
}
}
}

RepositoryItemColorEdit colorEdit = new RepositoryItemColorEdit();
private void gridView1_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e)
{
if (e.Column == gridColumn3)
{
var aVal = gridView1.GetRowCellValue(e.RowHandle, "A").ToString();
int i;
if (int.TryParse(aVal, out i))
{
if (i%2 == 0)
{
e.RepositoryItem = colorEdit;
}
}
}
}
}

说明:
数据源有两列,A是int型,B是string型
Grid有三列,A,B是绑定列,C是Unbound列,类型为Object
CustomUnboundColumnData事件处理C列的显示数据,以及向B列写入数据
CustomRowCellEdit事件处理C列的ColumnEdit为ColorEdit
上面两个事件的规则都是当A列为偶数时,显示ColorEdit,奇数则是普通的TextEdit样式。
运行效果如下:
  • 打赏
  • 举报
回复
纯从技术层面讨论,这个是可以实现的:
jiawaziaixialing 2014-09-18
  • 打赏
  • 举报
回复
引用 2 楼 davinciyxw 的回复:
1楼做法是将全列都设置为ColorEdit 通常如果需要一定的条件转换列的ColumnEdit需要用到GridView的CustomRowCellEdit事件,在里面设置e.RepositoryItem 但是你这个情况比较特殊,ColorEdit返回的是Color类型的数据,而你需要string,有一个思路就是将string类型的列隐藏,增加一个Unbound列,再用上面的CustomRowCellEdit事件处理。 未验证。
兄弟,这个方法不行啊,添加一列color类型的列,颜色的问题倒是解决了,这列上的其它string类型的数据怎么办,纠结死我了
jiawaziaixialing 2014-09-17
  • 打赏
  • 举报
回复
引用 2 楼 davinciyxw 的回复:
1楼做法是将全列都设置为ColorEdit 通常如果需要一定的条件转换列的ColumnEdit需要用到GridView的CustomRowCellEdit事件,在里面设置e.RepositoryItem 但是你这个情况比较特殊,ColorEdit返回的是Color类型的数据,而你需要string,有一个思路就是将string类型的列隐藏,增加一个Unbound列,再用上面的CustomRowCellEdit事件处理。 未验证。
就是麻烦在类型的转换,string的那列还不能隐藏,因为其它的单元格是用这列的string保存数据的,倒是考虑一下你说的增加的临时一列来处理,我先试试,晚点结贴
  • 打赏
  • 举报
回复
1楼做法是将全列都设置为ColorEdit 通常如果需要一定的条件转换列的ColumnEdit需要用到GridView的CustomRowCellEdit事件,在里面设置e.RepositoryItem 但是你这个情况比较特殊,ColorEdit返回的是Color类型的数据,而你需要string,有一个思路就是将string类型的列隐藏,增加一个Unbound列,再用上面的CustomRowCellEdit事件处理。 未验证。
exception92 2014-09-17
  • 打赏
  • 举报
回复

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧