4

我有两个列表,分别称为“课程”、“讲师”。“课程”列表包含以下列。

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

讲师列表包含以下列

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

我想将“CourseName”列添加到下拉列表中,这应该在 webpart 中实现。当我们从该下拉列表中选择任何课程时,我们应该在标签中显示讲师的姓名。最初,我尝试向 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 所指的帖子是我自己写的。

首先,您需要有两个单独的列表吗?您不能只有一个名为Courses的列表,其中包含以下列:*CourseName, Duration, Instructor * ?****** 然后您可以应用一个 CAML 查询,它基本上会执行以下操作:如果 CourseName = "SharePoint" ,然后显示来自 Instructor Column 的值 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!";
    }

请注意,您仍然需要使用我之前发布的“检索 SharePoint 列表数据”中的代码并将其绑定到下拉列表以绑定dropList字段,以便它从名为“课程”的 Sharepoint 列表中检索其值,正如 Lukasz M 所建议的那样。这也将出现在Page_Load事件中(在我上面写的代码之前)。希望对米希尔有所帮助!

于 2012-08-27T12:29:57.017 回答
0

尝试使用提供者和消费者 webpart。这可能是你的答案

资源

谢谢

于 2013-11-21T09:06:47.610 回答
0

在 SO 上查看这个问题:Retrieve SharePoint List Data and bind this to a dropdownlist。它似乎完全按照您的意愿工作。根据该代码,下拉列表的数据源应设置为:drpList.DataSource = list1.Items;. 另请注意,代码是在Page_Load方法中添加的。

于 2012-08-24T21:28:22.560 回答