2016-09-27 2 views
1

Das ist mein QuellcodeGridview, Es muss entweder ein IListSource, IEnumerable sein, oder 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> 

Das ist mein 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(); 
} 

Codierung dies ist meine Einheit framwork db Code

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

Wenn ich die Details auf der Webseite fülle und auf die Seite Speichern klicke, muss ich den letzten vom Benutzer in gridview eingegebenen Datensatz abrufen, B t igot der Fehler

Datenquelle ist ein ungültiger Typ. Es muss entweder eine IListSource, IEnumerable oder IDataSource sein.

Wer weiß, wie man davon kommt ??

Antwort

0

Der Aufruf von Last() hier ist das Problem:

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

den Anruf zu Last() wie folgt löschen:

gveducationInfo.DataSource = ats.GetEduInfo(); 

Warum?

GetEduInfo Die Methode gibt einen IList und ein IListIEnumerable implementiert, die mit dem DataSource arbeiten. Als Sie jedoch Last() anriefen, übergaben Sie nicht mehr IEnumerable, sondern übergaben stattdessen das letzte Element der Sequenz, das nicht funktioniert.

Wenn Sie ein einzelnes Element an Ihre binden möchten, müssen Sie es als IEnumerable einpacken. Sie können eine der Antworten auf diesen Passing a single item as IEnumerable<T>, wie das einzelne Element in einem Array verwenden Verpackung:

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

ich die Last entfernt(), aber ich habe die vollständige Tabelle in Gittern in der Homepage, aber ich brauche nur letzten Datensatz dieser Benutzer hat sich unterhalten. ist das möglich?? @Shaun Luttin –

+0

@KarthikeyanMuthukumaran Ja. Das lässt sich machen. Siehe Änderungen. –

+0

Vielen Dank @Shaun Luttin –

Verwandte Themen