0

複数の値を格納するために使用される文字列(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<Entity>、グリッドビューのデータソースを設定して、グリッドビューにバインドしたいことがあります。

バインディングの後、すべてのテキストを含む列としてデータを表示するだけです。(それは正常です、私はそれで大丈夫です、それは通常のルールです)しかし、研究プロパティの代わりに、[]を使用してデータを取得し、適切な列にバインドすることを指定することは可能ですか(たとえば、列「名前」、存在しないエンティティ.名前の代わりにエンティティ[「名前」]を呼び出す.....

4

3 に答える 3

0

Nameプロパティを追加できないのはなぜですか? 既存のインデクサーをバッキング フィールドとして使用できます。

public string Name
{
  get
  {
    return this["Name"];
  }
  set
  {
    this["Name"] = value;
  }
}
于 2012-08-30T15:21:14.090 に答える
0

実装することで、Entity クラスをキーと値の文字列ペアのコレクションのように見せることができます。IDictionary<string, string>

(この全体的なアプローチにはやや疑問がありますが、それには十分な理由があると思われるので、その議論には立ち入りません。)

于 2012-08-30T15:21:15.947 に答える
0

あなたは本質的にリストのリストについて話している。私がしているのは、ネストされたデータバインドコントロールです。最初のコントロールは、List<Entity>その後のOnItemDataBoundイベントにバインドされ、データ項目を引き出してから、それを内部コントロールにバインドします。

于 2012-08-30T15:22:33.580 に答える