如何将控件的 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属性

C#界面里的winform BackColor和BackgroundImage属性

将控件的属性设置为值

c#怎么用comboBox绑定treeview控件

XAML,将 Width 和 Height 属性绑定到其他控件的相同属性