2012-03-20 74 views
0

我正在使用C#和WebForms並遇到問題。我有一類這樣的:對象綁定列表Datagrid .Net WebForms

public class Foo 
{ 
     public int _touchID; 
     public string _touchName; 
    } 

然後,我有一個DAO對象返回的Foo一個List,我想綁定該列表到DataGrid

public List<Foo> getFooList() 
    { //get my list and whatnot} 

我把它綁定到我的asp:DataGrid這樣的:

TouchGrid.DataSource = dao.getFooList(); 
TouchGrid.DataBind(); 

aspx頁面是這樣的:

<asp:DataGrid ID="TouchGrid" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundColumn HeaderText="ID" DataField="_touchID"></asp:BoundColumn> 
     <asp:TemplateColumn HeaderText="Touch"> 
      <ItemTemplate> 
        <asp:Label ID="touchName" text='<%#DataBinder.Eval(Container.DataItem, "_touchname") %>' runat="server"/> 
        <%--<div class="touchDescriptionHidden"><%#DataBinder.Eval(Container.DataItem, "_description")%></div>--%> 
      </ItemTemplate> 
     </asp:TemplateColumn> 
    </Columns> 
</asp:DataGrid> 

當我運行代碼,我得到一個運行異常,因爲

一個字段或屬性的名稱在 選定的數據源中找不到'_touchID'。

我試過使用DataItem._touchID但我得到了同樣的錯誤使用。我也試圖自動生成列,看看我是否能得到一些提示,這是爲什麼失敗,但我得到一個消息,說

無法自動生成列選擇數據源

我知道我我錯過了一些東西,但我不確定究竟是什麼。如果我調試的DataBind線,並期待在DataSource,我可以看到我的對象就好了:

TouchGrid.DataSource

[0] - _touchID=1 | _name="stuff" 
[1] - _touchID=2 | _name="otherStuff" 

這裏有什麼問題?

回答

2

DataBinding機制不適用於類字段,但具有類屬性。

所以你需要將字段轉換爲屬性(這也是一個請求的OOP原則)。

public class Foo 
{ 
     public int _touchID; 
     public string _touchName; 
    } 

becomes 

public class Foo 
{ 
     public int TouchID {get; set;} 
     public string TouchName {get; set;} 
    } 
+1

不錯。我偶然忽略了這一點。謝謝。我會盡我所能接受。 – Rondel 2012-03-20 16:17:05

1
public class Foo 
{ 
    public int TouchID {get; set;} 
    public string TouchName {get; set;} 
} 

而且更改數據綁定如下

<asp:Label ID="touchName" 
text='<%# DataBinder.Eval(Container, "DataItem.TouchName") %>' runat="server"/> 

應該工作..

+0

相關提示我也會嘗試一下。 – Rondel 2012-03-20 16:17:47