0

インデックス付きプロパティを Devexpress aspxgridview コントロールにバインドする必要があります。実行時に列を作成していますが、これらのプロパティを FieldName に指定する方法がわかりません。

これは、通常のプロパティ(「p0」)と2つのインデックス付きプロパティ(「p1」と「p2」)を持つ私のクラスです。p1 と p2 をデータグリッドの列としてバインドする必要があります。

namespace TestClass{ 
    public class TestClass { 
        private int _p0; 
        private int _p1; 
        private string _p2; 
        public int p0 { get { return _p0; } set { _p0 = value; } } 
        public object this[string Field] { 
            get { switch (Field) { 
                case "p0": return _p0; 
                case "p1": return _p1; 
                case "p2": return _p2; 
                default: throw new IndexOutOfRangeException(); 
            } 
            } 
            set { 
                switch (Field) { 
                    case "p0": _p0 = (int)value; 
                        break; 
                    case "p1": _p1 = (int)value; 
                        break; 
                    case "p2": _p2 = (string)value; 
                        break; 
                    default: 
                        throw new IndexOutOfRangeException(); 
                } 
            } 
        } 
        public static TestClass[] GetABunch() { 
            TestClass[] result = new TestClass[1000]; 
            for (int i = 0; i < result.Length; i++) { 
                TestClass x = new TestClass(); 
                x["p0"] = i; 
                x["p1"] = i; 
                x["p2"] = "row " + i.ToString(); 
                result[i] = x; 
            } return result; 
        } 
    }
 }

クラスオブジェクトをバインドするサンプルコード

 TestClass.TestClass [] cls = TestClass.TestClass.GetABunch(); 
// This works since its a normal property. 
GridViewDataTextColumn txtCol = new GridViewDataTextColumn(); 
txtCol.FieldName = "p0"; 
grid.Columns.Add(txtCol); // Trying to bind the indexed property, not sure how to this. 
GridViewDataTextColumn txtCol1 = new GridViewDataTextColumn(); 
txtCol1.FieldName = "p1"; // should be something like MyObject["p1"] ? 
grid.Columns.Add(txtCol1); 
grid.KeyFieldName = "p0"; 
grid.DataSource = cls; 
grid.DataBind();
4

1 に答える 1

0

TestClass クラスでいくつかのパブリックプロパティを宣言することで、コードが機能するようにしました。p1 と p2。ASPxGridView は、ビジネス オブジェクトのパブリック プロパティのコンテンツのみを表示することに注意してください。また、グリッドを DataSource にバインドするコードは、Page_Init メソッド内で呼び出す必要があります。お役に立てれば。

于 2010-12-16T19:23:09.003 に答える