如何将控件的 BackColor(或其他属性)绑定到存储在 DataSource 中的字符串值?
Posted
技术标签:
【中文标题】如何将控件的 BackColor(或其他属性)绑定到存储在 DataSource 中的字符串值?【英文标题】:How do I bind the BackColor (or other properties) of a control to a string value stored in the DataSource? 【发布时间】:2020-06-10 12:18:31 【问题描述】:所以我有一个数据库,其中颜色值以 ARBG 格式存储为 INTEGERS。我想要做的是将控件的背景色绑定到数据库,以便颜色根据所选记录与控件背景匹配。 (即每条记录都有一种颜色,当表单更改绑定源上的记录显示时,控件背景会更改以匹配数据库中该记录的颜色 INT)。
到目前为止我有这个(不起作用):
pictureBox1.DataBindings.Add("BackColor", BindingSource1, "ColorINT");
问题是数据库将颜色存储为 INTEGER 并且数据绑定需要颜色,但我无法调用 Color.FromArgb 函数将绑定更改回颜色。我怎样才能做到这一点?
【问题讨论】:
您使用什么语言和工具/框架?您可以为这些人添加标签,以便熟悉他们的人发现您的问题吗? 您可以在将绑定添加到控件的数据绑定之前订阅绑定的Format 和Parse 事件。这允许来回转换数据格式。然后它取决于整数代表什么,即它是否与Color.FromArgb([int])
方法兼容。但当然,当事件引发时,您可以使用自己的转换方法。
谢谢@Jimi 用答案更新了我原来的帖子。不太确定那里发生了什么,但它有效!
@chepox 请不要添加问题的答案。通过单击“发布您的答案”按钮将答案发布为答案。您也可以询问 Jimi,看看他是否愿意扩展他的评论并发布作为答案。
【参考方案1】:
感谢 Jimi 的回复,我终于弄明白了。为可能有类似问题的人发帖:
private void IntegerToColor(object sender, ConvertEventArgs cevent)
if (cevent.DesiredType != typeof(Color)) return;
cevent.Value = Color.FromArgb(Convert.ToInt32(cevent.Value));
// 然后在表单加载时
Binding PicColorBind = new Binding("BackColor", BindingSource1, "ColorINT");
PicColorBind.Format += new ConvertEventHandler(IntegerToColor);
picColor.DataBindings.Add(PicColorBind);
【讨论】:
以上是关于如何将控件的 BackColor(或其他属性)绑定到存储在 DataSource 中的字符串值?的主要内容,如果未能解决你的问题,请参考以下文章
C#界面里control.ForeColor 和 control.BackColor 属性的使用
C#界面里的winform BackColor和BackgroundImage属性