Как получить доступ к элементам списка в списке - PullRequest
4 голосов
/ 06 мая 2009

Я пытаюсь отобразить ListItems в виде сетки.

Пожалуйста, помогите мне найти способ доступа к элементам списка.

using (SPSite site = new SPSite("http://mysitehere......"))
{
    using (SPWeb web = site.OpenWeb())
    {
        SPList list = web.Lists["TestList"];
        .......
        .......
    }
}

Пожалуйста, помогите мне получить доступ к значениям элемента списка.

Ответы [ 8 ]

7 голосов
/ 06 мая 2009

Приведенный ниже код должен помочь, получите полную статью от msdn здесь

using (SPSite site = new SPSite("http://mysitehere......"))
{
    using (SPWeb web = site.OpenWeb())
    {
        SPList list = web.Lists["TestList"];
        SPListItemCollection collListItems = list.Items;
        foreach (SPListItem oListItem in collListItems)
        {
           string value = SPEncode.HtmlEncode(oListItem["Field1_Name"]);
           // do something with value
         }
    }
}
5 голосов
/ 06 мая 2009

Вы можете использовать любой из следующих вариантов:

</p> <pre><code> SPList list; foreach (SPListItem item in list.Items) { string title = item["Title"]; } SPQuery query = new SPQuery(); query.ViewFields = "<FieldRef Name='Title'/>"; SPListItemCollection items = list.GetItems(query); foreach (SPListItem item in list.Items) { string title = item["Title"]; } for (int i = 0; i < list.Items.Count; i++ ) { string title = list.Items[i]["Title"]; }

С точки зрения производительности, я предлагаю использовать SP Query, так как тогда вы можете указать, какие поля извлекать и следует ли извлекать любые связанные метаданные с элементами списка. Это приводит к уменьшению количества вызовов в БД.

С уважением,

3 голосов
/ 06 мая 2009

Используйте SPDataSource для отображения элементов списка в виде сетки, т. Е. Создайте и настройте объект SPDataSource и привяжите его к элементу управления SPGridView .

2 голосов
/ 22 июня 2009

Для отображения элементов в виде сетки (если вы не хотите использовать SPGridView), я бы использовал метод GetDataTable вместо цикла foreach, как это делают многие ответы.

if (items.Count > 0)
{
    DataTable dt = items.GetDataTable();
    GridView1.DataSource = dt;
    GridView1.DataBind();
}
1 голос
/ 09 мая 2009

Если вы используете .NET 3.5, я бы рекомендовал использовать источник данных linq вместе с spgridview для привязки splistitems к gridView. Экономит много времени. У меня есть пример этого в моем блоге. Для отображения изображений вы должны получить URL-адрес изображения. Вот пример этого:

SPListItem item = GetItem();
string imagefieldhtml = item["NameOfImageField"].ToString();
ImageFieldValue imagefield = new ImageFieldValue(imagefieldhtml);

var url = imagefield.ImageUrl;

Переменная url теперь будет содержать URL изображения.

1 голос
/ 06 мая 2009

Подход SPQuery, предложенный неизвестным (Yahoo), - это путь, однако вы должны помнить, что предел строки по умолчанию для SPQuery равен 100:

try
        {
            using (SPSite site = new SPSite(theURL))
            {
                SPWeb web = site.OpenWeb();
                SPList list = web.Lists["TheNameOfTheList"];

                //search each ListItem where the date is after 1/1 2009
                SPQuery query = new SPQuery();

                //the default is 100, which is less then the expected max
                query.RowLimit = 500;

                // The U2U CAML Query builder rules :-)
                query.Query = "<Where><Gt><FieldRef Name='StartDate' /><Value Type='DateTime'>";
                query.Query += "2009-01-01T00:00:00Z</Value></Gt></Where>";
                SPListItemCollection resultset = list.GetItems(query);
                foreach (SPListItem item in resultset)
                {
                    // do something  
                }
            }
        }
1 голос
/ 06 мая 2009

Что ж, я не сделал никакой работы с sharepoint, но, думаю, вы можете использовать:

foreach (SPListItem item in list.Items)

или

foreach (SPListItem item in list.GetItems(view)) // or query

или доступ по индексу или guid:

SPListItem item = list.Items[10];
SPListItem item = list.Items[guid];
0 голосов
/ 06 сентября 2011

Хорошо, я решил вышеупомянутую проблему. В моем случае мне не нужно было использовать SPEncode.HTML, поэтому я закомментировал все, что не нужно. Вот фиксированный код, если кому-то еще это нужно:

using (SPSite site3 = SPContext.Current.Site)
{
    using (SPWeb web2 = site3.OpenWeb())
    {

        // SPWeb site3 = SPContext.Current.Site.RootWeb;
        SPList list2 = web2.Lists["Configuration"];
        SPListItemCollection collListItems = list2.Items;

        foreach (SPListItem oListItem in list2.Items)
        {
            //string value = SPEncode.HtmlEncode.ToString(oListItem["List name"]);
            string valueListName = oListItem["List name"].ToString();
            string valueListURL = oListItem["List URL"].ToString();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...