【问题标题】:Binding a column within a generic List to GridView将通用列表中的列绑定到 GridView
【发布时间】:2011-03-15 15:27:07
【问题描述】:

我尝试阅读所有文章并尝试了解决方案,但对我不起作用。

我尝试过的解决方案之一

Binding Generic List Array to GridView.

我使用您的 tweeked 示例代码创建的新项目文件如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SharePointProject2
{
public class abc
{
      public string customername { get; set; }
    public List<def> DEF { get; set; }
}

public class def
{
    public string materialcode { get; set; }
}

}

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;


namespace SharePointProject2.testing
{
public partial class testingUserControl : UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
            List<abc> test1 = new List<abc>();
            List<def> test2 = new List<def>();
            test2.Add(new def() { materialcode = "something" });
            test1.Add(new abc() { customername = "anything", DEF = test2 });
            GridView1.DataSource = test1;
            GridView1.DataBind();

    }


}

}

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %> 
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="testingUserControl.ascx.cs" Inherits="SharePointProject2.testing.testingUserControl" %>  

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Charge Code">
<ItemTemplate>
<asp:Label ID="Label1" runat="server"     Text='<%# ((List<def>)(Eval("DEF")))[0].materialcode %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

</Columns>

当我编译上面的代码时,这是错误消息

找不到类型或命名空间名称“def”(您是否缺少 using 指令或程序集引用?)

【问题讨论】:

  • 如果你的答案有帮助,别忘了点赞.....

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


【解决方案1】:

编辑:对不起,我误读了你的很多问题。您的示例根本无法编译,因此我制作了一个快速测试应用示例来说明解决方案:

public class def   {   public string materialcode{get;set;}   }
public class abc
{
    public string customername { get; set; }
    public List<def> DEF { get; set; }
}

List<abc> test1 = new List<abc>();
List<def> test2 = new List<def>();
test2.Add(new def() { materialcode = "something" });
test1.Add(new abc() { customername = "anything", DEF = test2 });

grdTest.DataSource = test1;
grdTest.DataBind();

我已经测试了上述内容,并且可以正常工作。如果您需要任何说明,请发表评论。

编辑:以下内容应该可以帮助您启动并运行,并且在我看来,这是一种实现自定义绑定的更简洁的方式,并且可以让您更轻松地调试问题。

ItemTemplate 中的Label 更改为以下内容:

<asp:Label ID="lblchargecode" runat="server"
    Text='' OnDataBinding="lblchargecode_DataBinding"></asp:Label>

DataBinding 方法添加到您的代码隐藏中:

protected void lblchargecode_DataBinding(object sender, System.EventArgs e)
{
    Label lbl = (Label)sender;
    lbl.Text = ((List<def>)(Eval("DEF")))[0].materialcode;
}

还要确保检查您的包含。您需要确保您的代码知道 def 类,因此在需要时包含 using 语句或完全限定它。

【讨论】:

  • 凯尔西您好,感谢您的回复。我把它改成了 --%> 我收到一条错误消息,指出材料代码不是属性。
  • @Janaki 我再次更新了问题,我忘记包含您的Label 的绑定声明。请参阅编辑,因为它应该可以工作,并且我已经对其进行了测试以进行验证。
  • 不起作用。我错过了什么吗?
  • @Janaki 老实说,我不知道我还能为你做什么。首先,“不起作用”对任何人都不是很有帮助。描述性甚至过于冗长。我花了很多时间制作一个工作示例。如果你不能让它工作,你需要发布你的 EXACT 代码(足以让它在测试应用程序中构建)和你的 EXACT 错误。您需要了解解决方案,而不仅仅是剪切和粘贴它并希望它有效。
  • 我用你的 tweeked 示例代码创建了一个新项目,它仍然说 def 不属于..这是我项目文件中的完整代码
【解决方案2】:

改成

<asp:TemplateField HeaderText="Charge Code">  
<ItemTemplate>

<asp:Label ID="lblchargecode" runat="server" Text='<%# ((List<def>) Eval("DEF"))[0].materialcode %>'></asp:Label>
</ItemTemplate>  
</asp:TemplateField>  

Eval 返回对象,您必须将其转换为原始类型然后使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多