【问题标题】:.Net Allow class that contains string to be bind.Net 允许绑定包含字符串的类
【发布时间】:2012-08-30 15:16:44
【问题描述】:

我有一个包含一个字符串的类,该字符串用于存储多个值(根据 xml 描述考虑)和 [] 的覆盖以将值放入字符串并获取它。

  class Entity
{
    private String _Data;
    public String Data
    {
        get { return (String)_Data; }
        set { _Data=value;}
    }

    public Object this[String propertyname]
    {
        get
        {
            return GetPropertyValue(propertyname);
        }
        set
        {
            SetPropertyValue(propertyname,Value);       
        }
    }

    private String GetPropertyValue(String propname)
    {
        if (Data == null) return "";
        String fbalise = "<" + propname + ">";
        int indexstart = Data.IndexOf(fbalise);
        if (indexstart == -1)
            //throw new Exception("Cannot Get Value because balise for " + propname + " does not exist");
            return null;
        indexstart += fbalise.Length;
        String ebalise = "</" + propname + ">";
        int caraclength = Data.IndexOf(ebalise, indexstart) - indexstart;
        return Data.Substring(indexstart, caraclength);
    }

   private void SetPropertyValue(String propname, String valuetoinsert)
    {
        if (Data == null) Data = "";
        String fbalise = "<" + propname + ">";
        String ebalise = "</" + propname + ">";
        int indexstart = Data.IndexOf(fbalise);
        if (indexstart == -1)
        {
            indexstart = Data.Length;
            Data = Data + fbalise + ebalise;
        }

        indexstart += fbalise.Length;

        int caraclength = Data.IndexOf(ebalise, indexstart) - indexstart;
        String lastvalue = Data.Substring(indexstart, caraclength);
        if (lastvalue != valuetoinsert)
        {
            Data = Data.Remove(indexstart, caraclength);
            Data = Data.Insert(indexstart, valuetoinsert);
        }
    }
}

现在我有一个List&lt;Entity&gt;,我想通过设置gridview 的数据源来绑定到gridview。

绑定后,它只将数据显示为包含我所有文本的列。 (这很正常,我可以接受,这是正常规则)但是是否可以指定我的绑定,而不是研究属性,使用 [] 来获取数据并将其绑定到适当的列(例如,如果我有列“名称”,调用 entity["Name"] 而不是 entity.Name 不存在.....

【问题讨论】:

标签: c# .net winforms gridview binding


【解决方案1】:

为什么不能添加Name 属性?您可以使用现有的索引器作为支持字段:

public string Name
{
  get
  {
    return this["Name"];
  }
  set
  {
    this["Name"] = value;
  }
}

【讨论】:

  • 我无法在设计时指定我的属性,它是一个参考,可以在运行时更新元数据而无需重新启动应用程序
【解决方案2】:

您可以通过实现IDictionary&lt;string, string&gt; 使您的实体类看起来像键值字符串对的集合

(整个方法有些问题,但我认为你有充分的理由,所以我不会讨论这个问题。)

【讨论】:

  • 如果您需要将键表示为属性名称而不是键/值对的一部分,并且在设计时不知道属性名称(正如您在另一条评论中指出的那样),那么我假设你应该使用dynamic。如果您为此使用 ExpandoObject,请注意它还实现了 IDictionary(如果我没记错的话,IDictionary&lt;string, object&gt;)。
  • 我已经尝试过动态但我没有发现为他们启用绑定机制
【解决方案3】:

您实际上是在谈论列表列表。我所做的是嵌套数据绑定控件。第一个控件绑定到您的List&lt;Entity&gt;,然后在OnItemDataBound 事件中拉出数据项,然后将其绑定到您的内部控件。

【讨论】:

  • 有没有办法补充Binding机制,我在框架中没有找到可以用来指定这些东西的接口
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多