所选项目在帖子后丢失(Sharepoint wss3.0 webpart)

时间:2011-03-22 14:13:46

标签: sharepoint web-parts

我是新的Sharepoint开发人员并尝试在窗口Sharepoint service 3.0 [免费版]中创建搜索webpart,到目前为止我可以从列表框中选择多个项目但是当我尝试将所选项目显示到文本框中时它会丢失。

以下是我的代码:

using System;
using System.Runtime.InteropServices;
using System.Data;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Drawing;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using System.Xml.Serialization;
using System.Collections;


namespace Filter_WebPart  
{
    [Guid("6641a7a3-d2c4-4fda-9ef5-89596845bd6e")]

    public class Filter_WebPart : System.Web.UI.WebControls.WebParts.WebPart
    {
        protected DataSet _dataset;        
        protected ListBox lstRegion;
        protected ListBox lstMaterial;        
        protected HtmlButton btnSubmit;
        protected HtmlInputText txtDisplay;        

        private string myExceptions = "";                
        //private int[] Index1;


        protected override void CreateChildControls()
        {                                                
            try
            {                                                                
                //Region Table / DataSet
                lstRegion = new ListBox();                                

                lstRegion.ID="lstRegion";                
                lstRegion.SelectionMode = ListSelectionMode.Multiple;                                  
                //lstRegion.EnableViewState = true;                                
                //lstRegion.SelectedIndex = 0;                                


                //Material Table / DataSet
                lstMaterial = new ListBox();                
                lstMaterial.SelectionMode = ListSelectionMode.Multiple;                
                lstMaterial.EnableViewState = true;

                btnSubmit = new HtmlButton();                
                btnSubmit.InnerText = "Filter";                                                
                btnSubmit.ServerClick += new EventHandler(btnSubmit_Click);

                txtDisplay = new HtmlInputText();                                


                //CommandButton

                this.Controls.Add(lstRegion);
                this.Controls.Add(lstMaterial);
                this.Controls.Add(btnSubmit);
                this.Controls.Add(txtDisplay);               

            }
            catch(Exception ChildControlException)
            {
                myExceptions += "ChildControlException:" + ChildControlException.Message;
            }
            finally
            { 
                //base.CreateChildControls();
            }

        }        

        protected override void OnPreRender(EventArgs e)
        {            
           if(!this.Page.IsPostBack)
           {                
                lstMaterial.DataSource = GetMaterialList();
                lstMaterial.DataTextField = "Material Name";
                lstMaterial.DataValueField = "Material Name";
                lstMaterial.DataBind();                                                              

                lstRegion.DataSource = GetRegionList();                                
                lstRegion.DataTextField = "Region Name";
                lstRegion.DataValueField = "Region Name";
                lstRegion.DataBind();
                txtDisplay.Value="1 time";
            }
            base.OnPreRender(e);            
        }

        void btnSubmit_Click(object sender, EventArgs e)
        {                        
            string tmpStr="";                                   
            int k=0;    
            //int i=0; 


            lstMaterial.DataBind(); 
            lstRegion.DataBind();

            //int[] indx = lstRegion.GetSelectedIndices();
            //for(i=0;i<indx.Length;i++)
            //{
            //    tmpStr = tmpStr+","+lstRegion.Items[indx[i]].Text;
            //}


            //if(lstRegion.SelectedIndex >=0 )
            //{
               //for(i=0;i < lstRegion.Items.Count;i++)
               //{
               //    //if(i==5 || i==10)
               //    //{
               //    //    lstRegion.Items[i].Selected = true;
               //    //}
               //    if(lstRegion.Items[i].Selected)
               //    {
               //        tmpStr = lstRegion.Items[i].Text;                       
               //    }
               //    k=k+1;
               //}
            //}

            foreach(ListItem RgItem in lstRegion.Items)
            {                                    
                if(RgItem.Selected == true)
                {                                                
                    tmpStr = tmpStr +","+RgItem.Text;                    
                    k=k+1;
                }                                
            }                

            //for(i=0;i<lstRegion.Items.Count;i++)
            //{
            //    if(lstRegion.Items[i].Selected == true)
            //    {
            //        txtDisplay.Value = txtDisplay.Value +","+lstRegion.Items[i].Text;     
            //        k=k+1;
            //    }                
            //}

            if(tmpStr != "" )
            {txtDisplay.Value = tmpStr;}
            else{                                   
                txtDisplay.Value = k.ToString();
                btnSubmit.InnerText = "Done";} 


        }                


        protected override void OnInit(EventArgs e)
        {                               
            base.OnInit(e);
            EnsureChildControls();                                                     
        }

        private DataSet GetRegionList()
        {            
            _dataset = new DataSet();
            DataTable _tbl = new DataTable();
            DataColumn _tblcol = new DataColumn("Region Name");
            _tbl.Columns.Add(_tblcol);            

            SPWeb web = SPContext.Current.Site.RootWeb;
            SPList myList = web.Lists["Service Area"];
            SPQuery query = new SPQuery();
            query.Query = "";
            SPListItemCollection items = myList.GetItems(query);

                foreach (SPListItem item in items)
                {
                    DataRow _row = _tbl.NewRow();                     
                    _row[0] = SPEncode.HtmlEncode(item["Region Name"].ToString());
                    _tbl.Rows.Add(_row);
                }

            _dataset.Tables.Add(_tbl);
            return _dataset;
        }

        private DataSet GetMaterialList()
        {
            _dataset = new DataSet();
            DataTable _tbl = new DataTable();
            DataColumn _tblcol = new DataColumn("Material Name");
            _tbl.Columns.Add(_tblcol);
            SPWeb web = SPContext.Current.Site.RootWeb;

                SPList myList = web.Lists["Material Master"];
                SPQuery query = new SPQuery();
                query.Query = "";
                SPListItemCollection items = myList.GetItems(query);
                foreach (SPListItem item in items)
                {
                    DataRow _row = _tbl.NewRow();
                    _row[0] = SPEncode.HtmlEncode(item["Material Name"].ToString());
                    _tbl.Rows.Add(_row);
                }

            _dataset.Tables.Add(_tbl);
            return _dataset;            
        }

        protected override void RenderContents(HtmlTextWriter output)
        {
            try
            {                
                this.EnsureChildControls();
                lstRegion.RenderControl(output);
                lstMaterial.RenderControl(output);
                btnSubmit.RenderControl(output);
                output.Write("<br>");
                txtDisplay.RenderControl(output);     

                //base.RenderContents(output);
            }
            catch (Exception RenderContentsException)
            {
                myExceptions += "RenderException:" + RenderContentsException.Message;
            }
            finally
            {
                if (myExceptions.Length > 0)
                {
                    output.WriteLine(myExceptions);
                }
            }
        }


    }
}

1 个答案:

答案 0 :(得分:1)

这应该有效。我已经在我的2010农场上尝试了你的代码,它运行正常(也适用于WSS3)。

更新程序集后,您是否忘记执行iisreset?

找到解决方案的最佳机会是使用调试器。您可以将调试器附加到正确的w3wp.exe进程。如果您不知道哪一个,请全部选中。然后在事件处理程序上设置断点并检查丢失选择的位置。

您不需要覆盖OnInit,您可以将EnsureChildControls()放在btnSubmit_Click中。