2016-06-07 5 views
1

연습 문제를 해결하기 위해 노력하고 있는데 일련의 확인란이 필요합니다.이 확인란은 어느 것이 선택되었는지에 따라 데이터 세트를 업데이트해야합니다. 현재 코드는 작동하지만 체크 박스는 제거되지 않습니다. 그들 :체크 박스를 사용하여 데이터 세트 격자보기 업데이트

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web.Security; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Data.SqlClient; 
using System.Web.Configuration; 


public partial class application_Crosswalk : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!this.IsPostBack) 
     { 
      Cache.Remove("CrosswalkSPS"); 

      DataSet ds = GetDataSet(); 
      chkColumns.DataSource = ds.Tables["CrosswalkSPS"].Columns; 
      chkColumns.DataTextField = "ColumnName"; 
      chkColumns.DataBind(); 
     } 
    } 
    private DataSet GetDataSet() 
    { 
     DataSet ds = (DataSet)Cache["CrosswalkSPS"]; 

     // Contact the database if necessary. 
     if (ds == null) 
     { 
      ds = RetrieveData(); 
      Cache.Insert("CrosswalkSPS", ds, null, DateTime.MaxValue, TimeSpan.FromMinutes(2)); 
      lblCacheStatus.Text = "Created and added to cache."; 
     } 
     else 
     { 
      lblCacheStatus.Text = "Retrieved from cache."; 
     } 

     return ds; 
    } 

    // This method performs the database query, if the 
    // DataSet object isn't available in the cache. 
    private DataSet RetrieveData() 
    { 
     string connectionString =  WebConfigurationManager.ConnectionStrings["dbbuddystring2"].ConnectionString; 
     string SQLSelect = "SELECT * FROM CrosswalkSPS"; 
     SqlConnection con = new SqlConnection(connectionString); 
     SqlCommand cmd = new SqlCommand(SQLSelect, con); 
     SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
     DataSet ds = new DataSet(); 

     try 
     { 
      con.Open(); 
      adapter.Fill(ds, "CrosswalkSPS"); 
     } 
     finally 
     { 
      con.Close(); 
     } 

     return ds; 
    } 

    protected void cmdFilter_Click(object sender, EventArgs e) 
    { 
     DataSet ds = GetDataSet(); 

     // Copy the DataSet so the cached item isn't affected 
     // when we remove columns. 
     ds = ds.Copy(); 

     foreach (ListItem item in chkColumns.Items) 
     { 
      if (item.Selected) 
      { 
       ds.Tables[0].Columns.Remove(item.Text); 
      } 
     } 

     gridCustomers.DataSource = ds.Tables[0]; 
     gridCustomers.DataBind(); 
    } 
} 
:

여기
ds.Tables[0].Columns.Add(item.Text); 

전체 코드입니다 :이로 변경하면

ds.Tables[0].Columns.Remove(item.Text); 

는 코드를 나누기 0

+1

실제 오류가 반환됩니다. –

+0

System.Data.DuplicateNameException : 'Common Career Technical Core'라는 열이이 DataTable에 이미 속해 있습니다. – PoopaSaurasRex

+0

복사본이 있고 나중에 캐시 [ "CrosswalkSPS"]'를 재설정하지 않았기 때문일 수 있습니다. 나는 내가 짐작하고 있다는 것을 모른다. –

답변

0

아아, 그것을 발견하고 필요! ds.Tables [0] .Columns.Remove (! item.Text);

관련 문제