2009-03-18 29 views
5

Xin chào Tôi đang phát triển bằng không gian tên SharePoint và tôi gặp phải lỗi sau khi tôi cố truy xuất trường Tiêu đề từ các mục danh sách.Lỗi danh sách SharePoint: "Giá trị không nằm trong phạm vi dự kiến"

Value does not fall within the expected range

Tôi biết rằng trường tồn tại vì tôi đã in ra tất cả các trường.

string value = (string)listItem[listItem.Fields["Title"].Id]; 
Console.WriteLine("Title = " + value); 

Cập nhật: đến mức nào View đã được sử dụng để lấy danh sách các mục đóng vai trò trong những gì các lĩnh vực sẽ có mặt? Mã này không thành công với cùng một ngoại lệ:

SPListItemCollection items = list.GetItems(list.DefaultView); 
foreach (SPListItem listItem in items) 
{ 
    try 
    { 
    Console.WriteLine("Title = " + listItem.Title); 
    } 
    catch (Exception e) 
    { 
    Console.WriteLine("Exception: " + e.Message); 
    } 
} 

Trong cả hai trường hợp, tài sản.DefaultView được sử dụng để truy xuất các mục danh sách.

Trả lời

1

Trường "Tiêu đề" có thể tồn tại trong danh sách nhưng không có trong chế độ xem mặc định. Bạn có thể làm điều này không?

foreach (var item in list.Items) Console.WriteLine((string)item["Title"]); 
+0

Bất kỳ nỗ lực nào để tham chiếu mục ["Tiêu đề"] đều ném ngoại lệ đó. – Ries

+0

Tôi đang gặp phải vấn đề tương tự –

0

Tôi không biết tại sao, nhưng tôi đã tạo GridView từ SPListItemCollection dưới dạng nguồn dữ liệu. Tôi đã có những lỗi giống nhau. Nhưng tôi đã cố gắng lấy dataTable từ bộ sưu tập:

SPListItemCollection res = da.getAllItems(); 
DataTable dt = res.GetDataTable(); 

Và sau đó tôi thấy trong GridView của tôi trường có tiêu đề của các mục danh sách được gọi là "LinkTitle". Vì vậy, tôi viết lại mã của tôi: SPListItemCollection res = da.getAllItems();

gridView.DataSource = res.Cast<SPListItem>().Select(a=> a["LinkTitle"]); 
gridView.DataBind(); 

Và tất cả mọi thứ hoạt động tốt :)

0

Các "Tiêu đề" không phải là (theo mặc định) có sẵn trong giao diện mặc định. Nếu bạn xem trang cài đặt chế độ xem, Tiêu đề được chọn, nhưng nó được gắn nhãn là "được liên kết với mục có trình đơn chỉnh sửa".

Trường được hiển thị bởi chế độ xem thực tế có tên là "LinkTitle" (bạn có thể xác nhận điều này bằng cách liệt kê list.DefaultView.ViewFields).

Giải pháp cho vấn đề của bạn chỉ đơn giản là thay thế item.Title bằng item["LinkTitle"].ToString().

1

tôi muốn đề nghị một cái gì đó giống như

if (item.Fields.ContainsField("Last_x0020_Modified")) 
{ 
    if (query.ViewFields.Contains("Last_x0020_Modified")) 
    ... 

B/c nếu lĩnh vực này đã không được yêu cầu trong SPQuery.ViewFields, có lẽ bạn không thể có được nó (ngoại lệ bao gồm lĩnh vực tạo, trường ID)

5

Tôi không biết liệu lỗi của bạn có được giải quyết hay không. Nhưng tôi đã phải đối mặt với cùng một vấn đề và tôi đã tìm ra giải pháp cho vấn đề.

Bạn phải đến:
Trung Quản trị> Quản lý ứng dụng> Quản lý ứng dụng Web
chọn ứng dụng Web sử dụng và chọn:
“General Settings> Resource tốc độ nhâp” qua giao diện Ribbon.

Trong đó cuộn xuống và tìm "List View Lookup Threshold" trong đó theo giá trị mặc định là 8 tăng giá trị cho đến khi lỗi biến mất.

Reference Link

+1

Tôi gặp vấn đề này. Tôi đã xác nhận rằng tên trường của tôi là chính xác. Ngoài ra, nó xuất hiện Microsoft đã thay đổi giá trị mặc định của điều này từ 8 đến 12. Tôi đã có 12 trong môi trường phát triển của tôi nhưng 8 trong môi trường dàn dựng nơi mà vấn đề nảy sinh. Tôi đã phải đặt lại nhóm ứng dụng trong IIS để thay đổi cài đặt có hiệu lực. –

1

Tôi có vấn đề này bởi vì cột là không một phần của giao diện mặc định. Thay vì dựa vào khung nhìn, truy vấn cho các cột cụ thể trực tiếp khi tạo SPListItemCollection.

SPList cityList = web.Lists[cityListName]; 
    SPListItemCollection items = cityList.GetItems("Title","LocCode"); 
    foreach (SPListItem item in items) 
    { 
      cityName = item["Title"].ToString().Trim(); 
      cityCode = item["LocCode"].ToString().Trim(); 
    } 
Các vấn đề liên quan