【问题标题】:C# Combobox double databinding - select item based on entityframework valueC# Combobox 双数据绑定 - 根据实体框架值选择项目
【发布时间】:2016-03-21 20:38:54
【问题描述】:

我的表很少,使用 Entity Framework 6。我的目标是将类 table1 绑定到 ComboBox 值成员

组合框数据源是:

ComboBoxBasicDB[] statType = new ComboBoxBasicDB[] {
            new ComboBoxBasicDB { Text = "A1", Value = 0 },
            new ComboBoxBasicDB { Text = "A2", Value = 1 },
            new ComboBoxBasicDB { Text = "A3", Value = 2 },
            new ComboBoxBasicDB { Text = "A4", Value = 4 },
            new ComboBoxBasicDB { Text = "B12", Value = 12 },
            new ComboBoxBasicDB { Text = "B13", Value = 13 },
            new ComboBoxBasicDB { Text = "B14", Value = 14 }
        };

statBS.DataSource = statType; // statBS == BindingSource, configured throught VS designer, comboBox.DataSource = statBS, comboBox.ValueMember = Value, comboBox.DisplayMember = Text

table1 包含名为 ex 的属性。 Value1 包含其中之一 (0, 1, 2, 4, 12, 13, 14)

我想要做的是从 DB 行加载并在 TextBox 上使用类似的东西:

textBox.DataBindings.Add("Text", binding, "Name");

效果很好

我尝试过这样的事情:

comboBox.DataBindings.Add("SelectedValue", binding, "Value1");

但它不起作用,查询后没有选择任何内容。 textBox 绑定成功

我使用了 SelectedIndex 但有一个问题,那就是值高于 7,因为 statType 中有 7 个项目而不是 14。

我希望你明白我想要做什么:/ 我以为我可以通过 comboBox.DataManager 做到这一点,但它是私有的

感谢您的任何想法。

【问题讨论】:

  • 正如我所说,我试过这个:comboBox.DataBindings.Add("SelectedValue", binding, "Value1");不起作用:/即使我尝试使用按钮操作作为 comboBox.SelectedValue = 14;

标签: c# entity-framework data-binding combobox


【解决方案1】:

所以解决方案是自定义实现,在提到的 DataBindings 中将 SelectedValue 更改为 SelectedItemValue

实施:

public class ComboBoxBasic : ComboBox
{
    bool diffTextColor = false;

    public ComboBoxBasic()
    {

    }

    public object SelectedItemValue
    {
        get
        {
            return (SelectedItem as ComboBoxBasicDB).Value;
        }

        set
        {
            for(int i = 0; i < Items.Count; i++)
            {
                ComboBoxBasicDB item = Items[i] as ComboBoxBasicDB;

                if(item.Value.ToString() == value.ToString())
                {
                    SelectedIndex = i;

                    break;
                }
            }
        }
    }

    public bool DifferentTextColor
    {
        get { return diffTextColor; }

        set
        {
            diffTextColor = value;

            if (diffTextColor)
            {
                DrawItem += ComboBoxBasic_DrawItem;
                DrawMode = DrawMode.OwnerDrawFixed;
            }
            else
                DrawItem -= ComboBoxBasic_DrawItem;
        }
    }

    void ComboBoxBasic_DrawItem(object sender, DrawItemEventArgs e)
    {
        e.DrawBackground();

        if (e.State == DrawItemState.Focus)
            e.DrawFocusRectangle();

        Brush brush = new SolidBrush((sender as Control).ForeColor);

        ComboBoxBasicDB item = (sender as ComboBoxBasic).Items[e.Index] as ComboBoxBasicDB;

        if (item.ForeColor != Brushes.Black)
            brush = item.ForeColor;

        e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
        e.Graphics.DrawString(item.Text, (sender as Control).Font, brush, e.Bounds.X, e.Bounds.Y);
    }
}

如果由 DifferentTextColor 启用,还有自定义 DrawItem

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多