I have a grid that takes LINQ code behind to load up the data on page load and I created a dropdown and tried to bind it to the grid like in chapter 14 on p.521 but it doesn't seem to work. I can easily do it using SQL datasources but I am really digging the Entity Framework.
Here is my code. I am using a Telerik grid at the moment but it shouldn't matter much right? If it does, I could try it in a listview or gridview. (I only need it to be read-only)
I do have autopostback enabled.
HTML Code:
<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="False"
CellSpacing="0" GridLines="None">
<MasterTableView DataKeyNames="ID">
<Columns>
<telerik:GridBoundColumn DataField="Winner" DataType="System.Int16"
FilterControlAltText="Filter Winner column" HeaderText="Winner"
SortExpression="Winner" UniqueName="Winner">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Loser" DataType="System.Int16"
FilterControlAltText="Filter Loser column" HeaderText="Loser"
SortExpression="Loser" UniqueName="Loser">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Result"
FilterControlAltText="Filter Result column" HeaderText="Result"
SortExpression="Result" UniqueName="Result">
</telerik:GridBoundColumn>
<telerik:GridTemplateColumn HeaderText="FOTN" UniqueName="FOTN" SortExpression="FOTN">
<ItemTemplate>
<asp:Image ID="Image1" ImageUrl='<%# Bool.GetImgPath( Eval("FOTN") ) %>' AlternateText="FOTN result" ImageAlign="Middle" runat="server" />
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="KOTN" UniqueName="KOTN" SortExpression="KOTN">
<ItemTemplate>
<asp:Image ID="Image2" ImageUrl='<%# Bool.GetImgPath( Eval("KOTN") ) %>' AlternateText="KOTN result" ImageAlign="Middle" runat="server" />
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="SOTN" UniqueName="SOTN" SortExpression="SOTN">
<ItemTemplate>
<asp:Image ID="Image3" ImageUrl='<%# Bool.GetImgPath( Eval("SOTN") ) %>' AlternateText="SOTN result" ImageAlign="Middle" runat="server" />
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="TitleFight" UniqueName="TitleFight" SortExpression="TitleFight">
<ItemTemplate>
<asp:Image ID="Image4" ImageUrl='<%# Bool.GetImgPath( Eval("TitleFight") ) %>' AlternateText="TitleFight result" ImageAlign="Middle" runat="server" />
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridBoundColumn DataField="Event" DataType="System.Int16"
FilterControlAltText="Filter Event column" HeaderText="Event"
SortExpression="Event" UniqueName="Event">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="WeightClass" DataType="System.Int16"
FilterControlAltText="Filter WeightClass column" HeaderText="WeightClass"
SortExpression="WeightClass" UniqueName="WeightClass">
</telerik:GridBoundColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
DataSourceID="EntityDataSource2" DataTextField="Class" DataValueField="ID">
</asp:DropDownList>
<asp:EntityDataSource ID="EntityDataSource2" runat="server"
ConnectionString="name=UFCEntities" DefaultContainerName="UFCEntities"
EnableFlattening="False" EntitySetName="WEIGHTs" Select="it.[ID], it.[Class]">
</asp:EntityDataSource>
<asp:EntityDataSource ID="EntityDataSource1" runat="server"
ConnectionString="name=UFCEntities" DefaultContainerName="UFCEntities"
EnableFlattening="False" EntitySetName="FIGHTs"
AutoGenerateWhereClause="True" EntityTypeFilter="" Select="" Where="">
<WhereParameters>
<asp:ControlParameter ControlID="DropDownList1"
Name="WeightClass" PropertyName="SelectedValue" Type="Int32" />
</WhereParameters>
</asp:EntityDataSource>
Code:
Code Behind:
using (UFCEntities myEntity = new UFCEntities())
{
var myFights = from a in myEntity.FIGHTs
// gets all the objects I need from inner joins
join b in myEntity.FIGHTERs on a.Winner equals b.ID
join c in myEntity.FIGHTERs on a.Loser equals c.ID
join d in myEntity.EVENTs on a.EventID equals d.ID
join f in myEntity.WEIGHTs on a.WeightClass equals f.ID
// query the objects and by setting them to variables
select new
{
ID = a.ID,
Winner = b.Name,
Loser = c.Name,
Result = a.Result,
FOTN = a.FOTN,
KOTN = a.KOTN,
SOTN = a.SOTN,
TitleFight = a.TitleFight,
Event = d.Name,
WeightClass = f.Class
};
RadGrid1.DataSource = myFights;
RadGrid1.DataBind();
}