所选项目在回发时丢失(Sharepoint wss3.0 webpart)

发布于 2024-10-26 08:44:50 字数 8548 浏览 1 评论 0原文

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

下面是我的代码:

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


    }
}

I am new Sharepoint developer and trying to create search webpart in window Sharepoint service 3.0 [Free edition], so far I can select multiple item from list box but when i trying to display selected item into textbox it getting lost.

Below is my code:

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


    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

属性 2024-11-02 08:44:50

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

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

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

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

This should be working. I've tried your code on my 2010 farm and it works fine (should also work for WSS3).

Did you forget to do an iisreset after updating the assembly ?

Your best chance to finding a solution is to use the debugger. You can attach the debugger to the right w3wp.exe process. If you don't know which one, select them all. Then set a breakpoint on your event handler and check where you lose your selection.

You don't need to override OnInit, you can put EnsureChildControls() in btnSubmit_Click.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文