2011-01-07 4 views
0

ASP.NETグリッドビューのデザイン時に次の設定を使用して、内部オブジェクトプロパティをgridviewにバインドできますVB.NETでデータを<%#Eval( "Object.Property")%>プログラムでバインドする方法

<asp:TemplateField HeaderText="ObjectName" > 
          <ItemTemplate>           
              <%# Eval("Object.property")%>          
            </ItemTemplate> 
         </asp:TemplateField> 

が、私は知ってやりたいことは、ランタイム

すなわち、私の列を定義するGridViewに追加して、データバインド

でプログラム的にこれを作成している誰もがこれを行って、または任意のポインタを持っていました?以下のようItemTemplateをASSINGあなたのコードビハインドに続いて

public class PropertyTemplate : ITemplate 
{ 
    private string _value = string.Empty; 

    public PropertyTemplate(string propValue) 
    { 
     this._value = propValue; 
    } 

    public void InstantiateIn(Control container) 
    { 
     container.Controls.Add(new LiteralControl(this._value)); 
    } 
} 

myTemplateField.ItemTemplate = new PropertyTemplate(myBusinessObject.MyProperty); 

別の方法

答えて

1

一つの方法は、ITemplateインタフェースを実装するクラスを作成することです

乾杯カスタムテンプレートが別の.ascxファイルにある場合はPage.LoadTemplateを使用します:

myTemplateField.ItemTemplate = Page.LoadTemplate("~/MyTemplate.ascx"); 

そして.ascxファイルは次のようになります。私は、これはあなたが達成したいものであるかどうかわからないんだけど

<%# Eval("MyProperty") %> 
2

。しかし、あなたが実行時に、オブジェクトのプロパティに応じて動的に列を作成したい場合は、次のコードを見てください(例では、TemplateColumnsを必要とするときVolpaの答えを見て、BoundColumnsである):

ASPX:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"></asp:GridView> 

コードビハインド:

Public Partial Class GridViewTest 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     If Not IsPostBack Then 
      BindData() 
     End If 
    End Sub 

    Private Sub BindData() 
     Dim cList As New List(Of CustomClass) 
     For i As Int32 = 1 To 10 
      Dim c As New CustomClass 
      c.ID = i 
      c.Name = "Object " & i 
      cList.Add(c) 
     Next 
     Dim model As New CustomClass 
     For Each prop As Reflection.PropertyInfo In model.GetType.GetProperties 
      If prop.CanRead Then 
       Dim field As New BoundField() 
       field.HeaderText = prop.Name 
       field.DataField = prop.Name 
       Me.GridView1.Columns.Add(field) 
      End If 
     Next 
     Me.GridView1.DataSource = cList 
     Me.GridView1.DataBind() 
    End Sub 

End Class 

Public Class CustomClass 
    Private _id As Int32 
    Private _name As String 

    Public Property ID() As Int32 
     Get 
      Return _id 
     End Get 
     Set(ByVal value As Int32) 
      _id = value 
     End Set 
    End Property 

    Public Property Name() As String 
     Get 
      Return _name 
     End Get 
     Set(ByVal value As String) 
      _name = value 
     End Set 
    End Property 
End Class 
関連する問題