2012-08-24 127 views
4

我有一個名爲「課程」,「教師」的兩個列表。 「課程」列表包含以下列。如何將列表項列綁定到SharePoint下拉列表中使用C#

CourseName Duration 
---------------------- 
Sharepoint 60days 
    MSBI  45days 
    .Net  90days 
    Java  50days 

教師列表包含以下幾列

Instructor Course 
--------------------- 
    John  Sharepoint 
    Mike  MSBI 
    Bob  Java 

我想補充「CourseName」欄下拉列表,應該在web部件實現。 當我們從該下拉列表中選擇任何課程時,我們應該在標籤中顯示教師的名字。 最初我嘗試添加一個下拉到web部件以顯示CourseName列以下代碼。但我未能創造。

DropDownList drpList; 
     protected override void CreateChildControls() 
     { 
      drpList = new DropDownList(); 
      SPSite site = SPContext.Current.Site; 
      SPWeb web = site.RootWeb; 

      SPList list1 = web.Lists["Courses"]; 
      var listitems = list1.Fields["Course Name"]; 
      drpList.DataSource = listitems; 
      drpList.DataTextField = "Course Name"; 
      drpList.DataValueField = "Course Name"; 
      drpList.DataBind(); 
      Controls.Add(drpList); 
     } 

任何人都可以告訴我正確的做法!

新實現。 我試着用下面的代碼

DropDownList drpList; 
     protected override void CreateChildControls() 
     { 
      drpList = new DropDownList(); 
      SPSite site = SPContext.Current.Site; 
      SPWeb web = site.RootWeb; 
      ArrayList myarr = new ArrayList(); 
      myarr.Add(1); 
      myarr.Add(2); 
      SPSiteDataQuery dataquery = new SPSiteDataQuery(); 
      dataquery.Lists = string.Format("<Lists><List ID={0} /></Lists>",web.Lists["Courses"].ID); 
      dataquery.ViewFields = "<FieldRef Name=\"Course Name\"/>"; 
      DataTable dt = web.GetSiteData(dataquery); 
      drpList.DataTextField = "Course Name"; 
      drpList.DataValueField = "Course Name"; 
      drpList.DataSource = dt; 
      drpList.DataBind(); 
      Controls.Add(drpList); 
     } 

下降downlist正在出現,但沒有數據。我認爲CAML查詢存在錯誤。請任何人糾正我請!

回答

0

看看SO上的這個問題:Retrieve SharePoint List Data and bind this to a dropdownlist。它看起來像你想要的那樣工作。根據該代碼,下拉列表的數據源應該如下設置:drpList.DataSource = list1.Items;。還請注意,該代碼是以Page_Load方法添加的。

+0

@Lukasz ..這是行不通的。首先,我在發佈這個問題之前先試着用那個。 – Mihir

+0

使用此代碼時,您會得到什麼錯誤或描述了什麼不起作用(如鏈接到的答案中所述)?你有沒有把這個代碼放在'Page_Load'方法中?如果它爲某人工作而不爲你工作,那麼在某處,在提供的代碼或數據中可能有區別,所以我試圖找出它有什麼區別:)。 –

+0

再次查看您的問題......您使用的是SharePoint 2007還是2010? –

1

Lukasz M提到的帖子是我自己寫的。

首先,你需要有兩個單獨的列表?你不能只有一個名爲的課程課程* CourseName,Duration,Instructor *?******然後你可以申請一個CAML查詢,基本上可以這樣做:如果CourseName =「SharePoint」,然後顯示教師列的值John?如果你有這個列表設置,因爲我已經(在一個列表中的所有3列)所描述的,那麼代碼將如下所示(放在的Page_Load事件):

SPListItemCollection itemCol = null; 
    SPSite site = new SPSite("http://yoursharepointsite"); 
    SPWeb web = site.OpenWeb(); 
    SPList list = web.Lists["Courses"]; //Name of your List with Courses 
    SPQuery qryCourse = new SPQuery(); 
    //This checks what you have selected in the drop-down list (assuming it's called dropList) 
    qryCourse.Query = "<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>" + dropList.SelectedItem.Text + "</Value></Eq></Where>"; 
    qryCourse.ViewFields = "<FieldRef Name='Instructor'/>"; //You want the Instructor Column to display 

    try 
    { 
     itemCol = list.GetItems(qryCourse); 
     foreach (SPListItem item in itemCol) 
     { 
      //Display the Instructor value in your label 
      lblInstructorName.Text = item["Instructor"].ToString(); 
     } 
    } 
    catch (NullReferenceException) 
    { 
     lblInstructorName.Text = "Some Kind of Error!"; 
    } 

請注意,您仍然需要使用我以前的帖子中的代碼Retrieve SharePoint List Data and bind this to a dropdownlist綁定dropList字段,以便它從Sharepoint列表中檢索其值,如Lukasz M建議的課程。這也將發生在事件中(在我上面提到的代碼之前)。希望能幫助Mihir!

+0

Hi Mihir - 沒有收到你的回覆。我認爲你已經解決了這個問題? –

0

嘗試使用提供者和消費者webpart。 這可能是你的答案

Source

感謝