Eval vs. DataField in ASP: Datagrid

I have this really random problem because it bothers me. This works at the end of the day, but the problem took some time to sort out, and wondered why this was happening, so if someone shed some light on this topic, I would be very grateful. Here is the problem

I have the following two columns on my datagrid

<asp:boundcolumn
datafield="contentsection.Id"
headerstyle-cssclass="dgHead"
headertext="Section"
itemstyle-cssclass="dgItem" />

and

<asp:templatecolumn>
<itemtemplate><%#Eval("contentsection.Id") %></itemtemplate>
</asp:templatecolumn>

The first column gives me an error:

A field or property named "contentection.Id" was not found in the selected data source

but the second one works fine. Any ideas or theories as to why this is happening?

The way I call and link my data is:

Page load code for

ContentList.DataSource = ContentBlockManager.GetList();
ContentList.DataBind();

The GetList () function is overloaded and defaults to 0

public static List<ContentBlockMini> GetList(int SectionId)
{
    List<ContentBlockMini> myList = null;

    SqlParameter[] parameters = { new SqlParameter("@ContentSectionId", SectionId) };

    using (DataTableReader DataReader = DataAccess.GetDataTableReader("dbo.contentblock_get", parameters))
    {
        if (DataReader.HasRows)
        {
            myList = new List<ContentBlockMini>();
        }
        while (DataReader.Read())
        {
            myList.Add(FillMiniDataRecord(DataReader));
        }
    }

    return myList;
}

. ContentSection - , ContentBlock

private static ContentBlockMini FillMiniDataRecord(IDataRecord DataRecord)
        {
            ContentBlockMini contentblock = new ContentBlockMini();

            contentblock.Id = DataRecord.GetInt32(DataRecord.GetOrdinal("Id"));
            contentblock.Name = DataRecord.GetString(DataRecord.GetOrdinal("Name"));
            contentblock.SEOKeywords = DataRecord.IsDBNull(DataRecord.GetOrdinal("SEOKeywords")) ? string.Empty : DataRecord.GetString(DataRecord.GetOrdinal("SEOKeywords"));
            contentblock.SEODescription = DataRecord.IsDBNull(DataRecord.GetOrdinal("SEODescription")) ? string.Empty : DataRecord.GetString(DataRecord.GetOrdinal("SEODescription"));
            if (DataRecord.GetInt32(DataRecord.GetOrdinal("ContentSectionId")) > 0)
            {
                ContentSection cs = new ContentSection();
                cs.Id = DataRecord.GetInt32(DataRecord.GetOrdinal("ContentSectionId"));
                cs.Name = DataRecord.IsDBNull(DataRecord.GetOrdinal("ContentSectionName")) ? string.Empty : DataRecord.GetString(DataRecord.GetOrdinal("ContentSectionName"));
                contentblock.contentsection = cs;

            }
            return contentblock;
        }

, .

+3
4

"Bind" , . , - , ( ).

Eval - , , . , , .. , , eval , .

. Eval - " ", Bind , .

+1

" " . , CompanyId Name Address, CompanyId Name, Company.Address.City.

Eval , @Import page directive.

+2

DataField ; ; , .

, eval, , , ... - .

.

+1

DataSource, : , .

EntityFramework Eval Properties, : <% # Eval ( "Customer.Address.PostalCode" )% > .

I do not know if this is your case, but if you provide more detailed information on how to get a DataSource, we can help you.

0
source

Source: https://habr.com/ru/post/1732178/


All Articles