2010-03-25 57 views
1

解決的LINQ的DataRow參考。代碼已被編輯以反映解決方案。傳遞在GridView的ItemTemplate

鑑於以下GridView

<asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="false" DataKeyNames="UniqueID" 
     OnSelectedIndexChanging="GridView1_SelectedIndexChanging" > 
<Columns> 
    <asp:BoundField HeaderText="Remarks" DataField="Remarks" /> 
    <asp:TemplateField HeaderText="Listing"> 
    <ItemTemplate> 
     <%# ShowListingTitle(Container.DataItem) %> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:BoundField HeaderText="Amount" DataField="Amount" DataFormatString="{0:C}" /> 
</Columns> 
</asp:GridView> 

它指的是下面的代碼隱藏方法:

protected String ShowListingTitle(object /* was DataRow */ row) 
{ 
    Listing listing = (Listing) row; 

    return NicelyFormattedString(listing.field1, listing.field2, ...); 
} 

DataRowListing劇組失敗(不能轉換從DataRowListing)我'肯定問題在於我在ItemTemplate中傳遞的內容,這並不是從LINQ到SQL數據集中的當前記錄的正確引用, eated,它看起來像這樣:

private void PopulateGrid() 
{ 
    using (MyDataContext context = new MyDataContext()) 
    { 
     IQueryable <Listing> listings = from l in context.Listings where l.AccountID == myAccountID select l; 

     GridView1.DataSource = listings; 
     GridView1.DataBind(); 
    } 
} 

回答

1

IIRC,你應該只被調用Container.DataItem,這將是一個Listing

<%# Container.DataItem.ToString() %>作爲測試試試吧。

我在幾年還沒有使用ASP.NET的,所以存儲可能是生鏽。

+0

這一切都花了!謝謝!我對使用LINQ與其他類型的DataSets如此簡單的方式印象深刻。 – 2010-03-25 12:22:27

+0

@Bob Kaufman:當然很簡單:)你只需要知道如何。 – leppie 2010-03-25 12:27:20

0

的LINQ to SQL不使用DataRow類所有;每個實體是它自己的類沒有基類,所以你不能施放的LINQ to SQL對象作爲一個DataRow ...

除非我失去了一些東西,你可以這樣做:

<%# ShowListingTitle(((Listing) (Container.DataItem)).Row) %> 

protected String ShowListingTitle(Listingrow) 
{ 
    return NicelyFormattedString(listing.field1, listing.field2, ...); 
} 

也可以附連到的RowDataBound和經由e.Row.DataItem訪問當前綁定的對象,然後使用它來通過e.Row.Cells []中的值提供給一個小區和提供一個值到文本屬性(對於綁定字段)或使用FindControl將其提供給控件。

0

<asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="false" DataKeyNames="UniqueID" 
     OnSelectedIndexChanging="GridView1_SelectedIndexChanging" > 
<Columns> 
    <asp:BoundField HeaderText="Remarks" DataField="Remarks" /> 
    <asp:TemplateField HeaderText="Listing"> 
    < 
     <%# ShowListingTitle(Convert.ToInt23(Eval("Field1")),Eval("Field2").ToString(),Eval("Field3").ToString()) %> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:BoundField HeaderText="Amount" DataField="Amount" DataFormatString="{0:C}" /> 
</Columns> 
</asp:GridView> 

,改變你的方法:


protected String ShowListingTitle(int field1,string field2) 
{ 
    Listing listing = (Listing) row; 

    return NicelyFormattedString(listing.field1, listing.field2, ...); 
} 

+0

好主意,但我正在處理來自列表的幾個字段並希望保留它們的數據類型。 – 2010-03-25 12:20:56

+0

這個方法只是舉例,你可以採取任何參數的方法 – 2010-03-25 12:22:02

相關問題