【问题标题】:DataBinding: 'ClassLibrary.SubCategoryModel' does not contain a property with the name 'objCat'DataBinding:“ClassLibrary.SubCategoryModel”不包含名为“objCat”的属性
【发布时间】:2017-12-27 04:55:15
【问题描述】:

错误:

DataBinding:“ClassLibrary.SubCategoryModel”不包含名为“objCat”的属性

SubCategories.aspx 的网格视图控件

<asp:GridView runat="server" ID="gridSubCategories" Height="156px" Width="240px" AutoGenerateColumns="false" AllowPaging="true" PageSize="5" OnPageIndexChanging="gridSubCategories_PageIndexChanging">
    <Columns>
        <asp:BoundField DataField="SubCategoryID" HeaderText="Sub Category ID" InsertVisible="false" ReadOnly="true" SortExpression="SubCategoryID" />
        <asp:BoundField DataField="SubCategoryName" HeaderText="Sub Category" SortExpression="CategoryName" />
        <asp:BoundField DataField="objCat.CategoryName" HeaderText="Category" InsertVisible="false" ReadOnly="true" SortExpression="objCat.CategoryName" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="btnEdit" runat="server" CommandName="EnableEdit" CommandArgument="<%#((GridViewRow)Container).RowIndex%>" Text="Edit" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="btnDelete" runat="server" CommandName="DeleteCategory" CommandArgument="<%#((GridViewRow)Container).RowIndex%>" Text="Delete" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

代码抛出错误:

if (!IsPostBack)
{
    gridSubCategories.DataSource = sda.GetSubCategories();
    gridSubCategories.DataBind();
}

类定义:

public class CategoryModel
{
    public int CategoryID { get; set; }
    public string CategoryName { get; set; }
}

public class SubCategoryModel
{
    public CategoryModel objCat = new CategoryModel();
    public int SubCategoryID { get; set; }
    public string SubCategoryName { get; set; }
}

GetSubCategories 方法:

public List<SubCategoryModel> GetSubCategories()
{
    List<SubCategoryModel> listSubCatList = new List<SubCategoryModel>();
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("GetSubCategories"))
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Connection = con;
            con.Open();
            SqlDataReader sdr = cmd.ExecuteReader();
            while (sdr.Read())
            {
                SubCategoryModel subcatObj = new SubCategoryModel();
                subcatObj.SubCategoryID = Convert.ToInt32(sdr["SubCategoryID"]);
                //subcatObj.objCat.CategoryID = Convert.ToInt32(sdr["CategoryID"]);
                subcatObj.objCat.CategoryName = sdr["CategoryName"].ToString();
                subcatObj.SubCategoryName = sdr["SubCategoryName"].ToString();

                listSubCatList.Add(subcatObj);
            }
            con.Close();
            return listSubCatList;
        }
    }
}

我可以看到正在获取数据并传递给gridview的DataSource: Contents of DataSource property of the gridview

为什么 objCat 没有被识别为 CategoryModel 类中的属性?还有其他方法可以将对象绑定到对象内吗?

【问题讨论】:

    标签: c# asp.net gridview data-binding


    【解决方案1】:

    如果您将类列表绑定到 GridView。然后我建议通过添加ItemType 切换到强类型数据控件。然后您可以使用Item 访问这些属性。

    <asp:GridView ID="GridView1" runat="server" ItemType="SubCategoryModel">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <%# Item.SubCategoryID %>
                    <%# Item.objCat.CategoryName %>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    

    【讨论】:

      猜你喜欢
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多