Получить значения из списка в Gridview в SharePoint Webpart? - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть список с именем Регистрация , и ниже приведены столбцы моего списка.

Столбец : Тип

Имя сотрудника: лицо или группа
Имя руководителя: лицо или группа
Имя практики: одна строка текста
Название программы: Поиск
Статус: Выбор
Условие: несколько строк текста

А теперь я создал веб-часть, которая будет отображать все эти значения в виде таблицы. Вот код, который я сделал для webpart.cs

protected void Page_Load(object sender, EventArgs e)
{
    gridViewManager.DataSource = GetData();
    gridViewManager.DataBind();
}

#region Try2
DataTable GetData()
{
    SPSite oSiteCollection = SPContext.Current.Site;
    SPWeb oWeb = oSiteCollection.OpenWeb();
    SPList oSPList = oWeb.Lists["Registration"];
    SPListItemCollection oSPListItemCollection = oSPList.Items;
    DataTable dt = new DataTable();            
    try
    {              
        dt.Columns.Add("Employee Name", typeof(String));
        dt.Columns.Add("Manager Name", typeof(String));
        dt.Columns.Add("Practice Name", typeof(String));
        dt.Columns.Add("Program Name", typeof(LookupField));
        //dt.Columns.Add("Program Name", typeof(String));
        dt.Columns.Add("Status", typeof(String));
        dt.Columns.Add("Prerequisite", typeof(String));               
        DataRow dataRow;                 
        foreach (SPListItem oSplistItem in oSPListItemCollection)
        {
            dataRow = dt.Rows.Add();
            dataRow["Employee Name"] = oSplistItem["Employee Name"].ToString();
            dataRow["Manager Name"] = oSplistItem["Manager Name"].ToString();
            dataRow["Practice Name"] = oSplistItem["Practice Name"].ToString();
            dataRow["Program Name"] = oSplistItem["Program Name"].ToString();
            dataRow["Status"] = oSplistItem["Status"].ToString();
            dataRow["Prerequisite"] = oSplistItem["Prerequisite"].ToString();
        }
        return dt;
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine("Managers Approval" + ex.Message.ToString());
        return dt;
    }

#endregion Try2
}

Здесьэто код для кода usercontrol:

<SharePoint:SPGridView runat="server" ID="gridViewManager" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="Employee Name" HeaderText="Employee Name" />
        <asp:BoundField DataField="Manager Name" HeaderText="ManagerName" />
        <asp:BoundField DataField="Practice Name" HeaderText="Practice Name" />
        <asp:BoundField DataField="Program Name" HeaderText="Program Name" />
        <asp:BoundField DataField="Status" HeaderText="Current Status" />
        <asp:BoundField DataField="Prerequisite" HeaderText="Prerequisite" />
        <asp:TemplateField HeaderText="">
            <ItemTemplate>
                <asp:Button ID="BtnEdit" runat="server" Text="Take Action" />
                <asp:Button ID="Button1" runat="server" Text="View Details" />
            </ItemTemplate>
            <HeaderTemplate>
            </HeaderTemplate>
        </asp:TemplateField>
    </Columns>
</SharePoint:SPGridView>

Теперь я столкнулся с проблемой с этими двумя строками кода

dt.Columns.Add("Program Name", typeof(LookupField));
dt.Columns.Add("Prerequisite", typeof(String)); 

, если я не использую это, то эта веб-часть работает отлично.но я тоже хотел отобразить эти поля.как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

Вы смотрели, как API SharePoint генерирует DataTable для вас, используя SPListItemCollection.GetDataTable ()?

0 голосов
/ 21 февраля 2012

Ваша проблема с нулевыми значениями. .ToString () потерпит неудачу, если объект является нулевым. Я предполагаю, что все остальные поля никогда не имеют нулевых значений (по крайней мере, для ваших запросов), кроме полей, с которыми у вас возникают проблемы. У вас есть несколько вариантов. Вы можете просто проверить, является ли значение нулевым, и поместить пустую строку, если это не так, для многих полей, которые уже являются строками, вы можете просто привести их, а не. Вы можете использовать Convert.ToString (object), который обрабатывает нули. Я мог бы продолжить с несколькими другими вариантами, но я думаю, что вы можете взять это отсюда.

...