2016-09-27 36 views
1

这是我的源代码GridView控件,它必须是一个IListSource,IEnumerable的,或者的IDataSource

<asp:GridView ID="gveducationInfo" CssClass="footable" runat="server" AutoGenerateColumns="false" Style="max-width: 600px" ShowHeaderWhenEmpty="true" DataKeyNames="Education_ID" OnRowCommand="gveducationInfo_RowCommand"> 
    <Columns> 
     <asp:BoundField DataField="Education_ID" HeaderText="" ItemStyle-CssClass="hiddenColumn" HeaderStyle-CssClass="hiddenColumn" /> 
     <asp:BoundField DataField="Degree_Type" /> 
     <asp:BoundField DataField="Name" HeaderText="Name" /> 
     <asp:BoundField DataField="Year_Of_Passing" HeaderText="Year Of Passing" /> 
     <asp:BoundField DataField="Institute_Name" HeaderText="Institute Name" /> 
     <asp:BoundField DataField="State_ID" HeaderText="State" /> 
     <asp:BoundField DataField="City_ID" HeaderText="City" /> 
     <asp:BoundField DataField="Name" HeaderText="Name" /> 
     <%--<asp:BoundField DataField="Notes" HeaderText="Notes" />--%> 
     <asp:ButtonField ButtonType="Image" ImageUrl="~/images/edit16.png" CommandName="EditRow" ItemStyle-CssClass="align-center" /> 
     <asp:ButtonField ButtonType="Image" ImageUrl="~/images/delete16.png" CommandName="DeleteRow" ItemStyle-CssClass="align-center" /> 
    </Columns> 
</asp:GridView> 

这是我的C#编码

protected void butSave_ServerClick(object sender, EventArgs e) 
{ 
    Business.ATS.ATS ats = new Business.ATS.ATS(); 
    Data.Education_Info education_Info = new Data.Education_Info(); 
    var state = ats.GetStates(); 
    var city = ats.GetCities(); 
    education_Info = ats.GetEducationInfo(Applicant_ID).SingleOrDefault(); 
    education_Info = new Data.Education_Info(); 
    education_Info.Education_ID = 0; 
    education_Info.Applicant_ID = Applicant_ID; 
    education_Info.Name = txtdegreename.Value; 
    education_Info.Year_Of_Passing = txtyearofpassing.Value; 
    education_Info.Institute_Name = txtnameofinstitution.Value; 
    education_Info.City_ID = Convert.ToInt32(ddlcity.SelectedValue); 
    education_Info.State_ID = Convert.ToInt32(ddlstate.SelectedValue); 
    education_Info.Degree_Type = Convert.ToInt32(ddldegreetype.SelectedValue); 
    ats.SaveEducationalInfo(education_Info); 
    gveducationInfo.DataSource = ats.GetEduInfo().Last(); 
    gveducationInfo.DataBind(); 
} 

这是我的实体framwork DB代码

public IList<Education_Info> GetEduInfo() 
{ 
    using (Data.ATSEntities dc = new Data.ATSEntities()) 
    { 
     var lsteducationinfo = dc.Education_Info.ToList(); 
     return lsteducationinfo; 
    } 
} 

当我填写网页中的细节,然后单击保存页面我需要获取用户在gridview中输入的最后一条记录,请输入错误代码

数据源是无效类型。它必须是IListSource, IEnumerable或IDataSource。

有人知道如何骑它吗?

回答

0

Last()这里调用的问题是:

gveducationInfo.DataSource = ats.GetEduInfo().Last(); 

删除调用Last()这样的:

gveducationInfo.DataSource = ats.GetEduInfo(); 

为什么?

GetEduInfo该方法返回一个IListIList实现IEnumerable,将与DataSource工作。但是,当您调用Last()时,您不再传递IEnumerable,而是传递序列的最后一项,这不起作用。

如果要将单个项目绑定到DataSource,则需要将其包装为IEnumerable。你可以使用任何的答案这个Passing a single item as IEnumerable<T>,诸如阵列中的包裹的单个项目:

gveducationInfo.DataSource = new Education_Info[] {ats.GetEduInfo().Last()}; 
+0

我删除了最后(),但我在网页电网得到了全表,但我只需要最后一个记录该用户已进入。那可能吗?? @Shaun Luttin –

+0

@KarthikeyanMuthukumaran是的。这是可能的。查看修改。 –

+0

非常感谢你@Shaun Luttin –

相关问题