Привязка столбца в общем списке к GridView - PullRequest
1 голос
/ 15 марта 2011

Я пытался прочитать все статьи и пробовал решения, но у меня не получилось.

Одно из решений, которое я попробовал

Привязка универсального массива списка к GridView .

Новый файл проекта, который я создал с помощью вашего примера кода для настройки, -ниже:

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 или ссылка на сборку?)

Ответы [ 2 ]

1 голос
/ 15 марта 2011

РЕДАКТИРОВАТЬ: Извините, я неправильно прочитал многие ваши вопросы. Ваш пример не компилируется, поэтому я сделал пример приложения для быстрого тестирования, чтобы проиллюстрировать решение:

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();

Я проверил выше, и это работает. Оставьте комментарий, если вам нужны какие-либо разъяснения.

РЕДАКТИРОВАТЬ: Следующее должно заставить вас работать, и, на мой взгляд, более чистый способ реализации пользовательского связывания и позволяет гораздо проще отладить проблему.

Измените Label в вашем ItemTemplate на следующее:

<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 или полностью определите его.

0 голосов
/ 15 марта 2011

изменить на

<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 возвращает объект, который нужно привести к исходному типу, а затем использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...