2011-03-22 2 views
0

나는 새로운 셰어 포인트 개발자이며 윈도우 셰어 포인트 서비스 3.0 [무료 버전]에서 검색 웹 파트를 만들려고하는데 지금까지는 목록 상자에서 여러 항목을 선택할 수 있지만 선택한 항목을 텍스트 상자에 표시하려고하는데 길을 잃어 버렸습니다.[Sharepoint wss3.0 webpart]

나는이 문제에 대해 하나의 답변을 제시 할 것이고,이 문제는 조금이라도 나에게 도움이 될 수 있으므로 내 실수를 지적 할 수있다. 당신이 전문가 검토하고 PLS 내 실수를 알게하는

감사

다음은 내 코드입니다.

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


    } 
} 

답변

0

이것은 작동해야합니다. 내 2010 팜에 코드를 시도했지만 잘 작동합니다 (WSS3에서도 작동해야 함).

어셈블리를 업데이트 한 후에 iisreset을 수행하는 것을 잊었습니까?

해결책을 찾는 가장 좋은 방법은 디버거를 사용하는 것입니다. 디버거를 올바른 w3wp.exe 프로세스에 연결할 수 있습니다. 어느 것을 모르는 경우 모두 선택하십시오. 그런 다음 이벤트 핸들러에 중단 점을 설정하고 선택을 잃어버린 곳을 확인하십시오.

OnInit을 재정의 할 필요가없는 경우 EnsureChildControls()를 btnSubmit_Click에 넣을 수 있습니다.

관련 문제