Получить значения из списка в Gridview в SharePoint Webpart?

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

Колонка: Тип

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

И теперь я создал веб-часть, которая будет отображать все эти значения в виде таблицы. Вот код, который я сделал для 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 ответа

Решение

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

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

Другие вопросы по тегам