自定义控件实体框架绑定

时间:2010-11-27 22:19:58

标签: c# winforms entity-framework-4

我正在考虑创建控制 - 正常的多行文本框,用户将在其中插入用逗号分隔每个数字的电话号码。

1111111111,
2222222222,
3333333333,
4444444444,
...

我有实体用户和实体电话号码。

现在我想将phoneNumber实体绑定到该控件。问题是我应该在这个控件中实现什么,以便它能理解要绑定的内容。例如,如果我将phoneNumber绑定到combobox .net知道如何在此控件上显示它,但在我的情况下会如何?

感谢您提供有关如何开始创建此类内容的任何帮助和提示。

再见

3 个答案:

答案 0 :(得分:1)

您可以在Combobox中完成,拥有数据源和数据成员的属性,然后在您的代码循环中通过数据库的电话号码。列,并在每个条目后用逗号将它们附加到文本框中。 我自己已经实现了类似的东西。

答案 1 :(得分:0)

在演示文稿中转换您的数据以便用户查看并在您的域中转换回来将解决您的问题。 以下是我的示例代码,用于将Enumeration演示文稿转换为项目中的本地化资源: 虽然它不是一个优雅的代码,但可能解决你的问题。 在转换中,您可以通过commma将您的数字集合拆分并将其设置为您的控件,然后在转换中以逗号分隔字符串并构建您的集合。

[MarkupExtensionReturnType(typeof (IValueConverter))]
public abstract class ConverterMarkupExtension<T> : MarkupExtension where T : class, IValueConverter, new()
{
    private static T _converter;

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return _converter ?? (_converter = new T());
    }
}

public class EnumConverter<T> : ConverterMarkupExtension<EnumConverter<T>>, IValueConverter
    where T : struct
{
    #region Implemented Interfaces

    #region IValueConverter

    /// <summary>
    ///   convert from enum to string
    /// </summary>
    /// <param name = "value"></param>
    /// <param name = "targetType"></param>
    /// <param name = "parameter"></param>
    /// <param name = "culture"></param>
    /// <returns></returns>
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
        {
            return null;
        }

        string convert = typeof(GlossaryResources).GetProperty(value.ToString()).GetValue(null, null).ToString();

        return new Item { Name = value.ToString(), Value = convert };
    }

    /// <summary>
    ///   convert from string to enum value
    /// </summary>
    /// <param name = "value"></param>
    /// <param name = "targetType"></param>
    /// <param name = "parameter"></param>
    /// <param name = "culture"></param>
    /// <returns></returns>
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
        {
            return null;
        }

        T enumvalue;
        Enum.TryParse(value.Cast<Item>().Name, out enumvalue);
        return enumvalue;
    }

    #endregion

    #endregion
}

public class GenderEnumConverter : EnumConverter<Gender>
{
}

答案 2 :(得分:0)

您可以创建自己的TextBox自定义实现,该实现具有一个属性,该属性接受您的对象集合并包装文本框的“Lines”属性。这样的事情(假设NumberText是暴露实际文本的字段的名称):

    public class NumberBox : TextBox
    {
        public IList<Number> Numbers 
        {
            get
            {
                List<Number> numbers = new List<Number>();
                foreach (string line in Lines)
                {
                    numbers.Add(new Number()
                    {
                        NumberText=line
                    });
                }
                return numbers;
            }

            set
            {
                List<string> numberStrings = new List<string>();
                foreach (Number n in value)
                {
                    numberStrings.Add(n.NumberText);
                }
                this.Lines = numberStrings.ToArray();
            }
        }
    }