4

「コース」と「インストラクター」という 2 つのリストがあります。「コース」リストには、次の列が含まれます。

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);
        }

ドロップダウンリストは表示されますが、データがありません。CAML クエリに誤りがあると思います。誰でも私を訂正してください!!

4

3 に答える 3

1

Lukasz M が参照している投稿は、私が書いたものです。

まず、2 つの別々のリストが必要ですか? * CourseName , Duration, Instructor * ?****** 次に、基本的に次のようなことを行う CAML クエリを適用できます: If the CourseName = "SharePoint "をクリックし、Instructor 列の値 John を表示しますか? 私が説明したようにこのリストを設定した場合 (1 つのリストに 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!";
    }

Lukasz M が提案したように、 Coursesと呼ばれる Sharepoint リストから値を取得するように、以前の投稿SharePoint リスト データの取得のコードを引き続き使用し、これをドロップダウン リストにバインドしてdropListフィールドをバインドする必要があることに注意してください。これはPage_Loadイベントにも含まれます (上記で記述したコードの前)。それがミヒルに役立つことを願っています!

于 2012-08-27T12:29:57.017 に答える
0

SO: Retrieve SharePoint List Data and bind this to a dropdownlistに関するこの質問を見てください。まさにあなたが望むように動作するようです。そのコードによれば、ドロップダウン リストのデータ ソースは次のように設定する必要がありますdrpList.DataSource = list1.Items;Page_Loadメソッドにコードが追加されていることにも注意してください。

于 2012-08-24T21:28:22.560 に答える