已解决。代码已经过编辑以反映解决方案。
鉴于以下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, ... );
}
从DataRow
到Listing
的演员表失败(无法从DataRow
转换为Listing
)我确定问题在于我从内部传递的内容ItemTemplate,它不是我创建的LINQ to SQL数据集中当前记录的正确引用,如下所示:
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();
}
}
答案 0 :(得分:1)
IIRC,您应该致电Container.DataItem
,这将是Listing
。
通过<%# Container.DataItem.ToString() %>
作为测试来尝试。
我多年来没有使用过ASP.NET,因此内存可能会生锈。
答案 1 :(得分: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 []为单元格提供值,并为text属性提供值(对于绑定字段)或使用FindControl将其提供给控件。
答案 2 :(得分: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, ... );
}