2010-03-25 56 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

相关问题