Advertisement

08.14.2008 at 03:50PM PDT, ID: 23650004
[x]
Attachment Details
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

9.3

Fixed one bug with checkbox state, now I have a new problem

Asked by knowlton in Programming for ASP.NET

I have a GridView with Pager buttons.

Each GridView row has an unbound checkbox on the left column.

On Page 1, if I check the checkboxes for say, the first two rows, and then go to another Page, then BACK to Page 1 --- the check boxes are NOT checked.

I have code in place that is supposed to be GATHERING the check box state for each checkbox and updating the DataSet boolean column appropriately.  See code snippet.Start Free Trial
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
 
//Sorting, Paging and CheckBox state preservation -- seem to be stable now
 
public partial class UserControls_Workflow_CO2SearchResults : System.Web.UI.UserControl
{
	private string _workflowConnectionString = ConfigurationManager.ConnectionStrings["WORKFLOWConnection"].ConnectionString;
 
	private DataSet _ds;
 
	//PROPERTY NOT IMPLEMENTED YET - NOT BEING USED YET
	public DataSet CurrentDataSource
	{
		get
		{
			return _ds;
		}
 
		set
		{
			_ds = value;
		}
	}
	
	protected void Page_Load( object sender, EventArgs e )
	{
		string tempArgument = Request.Params.Get("__EVENTARGUMENT");
	
		//INITIALIZATION
		if (!Page.IsPostBack)
		{
			string[] DataKeyNames = { "ID" };
			ViewState["DataKeyNames"] = DataKeyNames;
			ViewState["SortExp"] = DataKeyNames.GetValue(0);
			ViewState["SortDir"] = SortDirection.Descending;
			ViewState["PageIndex"] = 0;
			LocalSelectAllWorkitemTypes();
			this.BuildGridView(true);			
		}
				
		//THE "CHECK ALL" CHECKBOX IN THE HEADER WAS CLICKED
		if (tempArgument == "CHECKALL")
		{
			bool statepassedin = false;
 
			string newpageindex = Request.Params.Get("__EVENTTARGET");
			if (newpageindex == "true")
			{
				statepassedin = true;
			}
 
			this.HandleCheckAllClick(statepassedin);
		}
 
		GatherCheckBoxStatus();
 
		//A PAGER BUTTON WAS CLICKED
		if (tempArgument == "PAGERBUTTON")
		{
			string newpageindex = Request.Params.Get("__EVENTTARGET");
			int adjustedPageIndex = Int32.Parse(newpageindex) - 1;
			ViewState["PageIndex"] = adjustedPageIndex;			
			this.BuildGridView(false);
		}
	}
 
	//PRESERVE THE CHECKBOX STATUS ACROSS POSTBACKS (SORTING AND PAGING)
	private void GatherCheckBoxStatus()
	{
		if ((DataSet)ViewState["DataStore"] != null)
		{
			DataSet ds = (DataSet)ViewState["DataStore"];
 
			for (int i = 0; i < this.GridViewSearchResults.Rows.Count; i++)
			{
				bool state = ((CheckBox)this.GridViewSearchResults.Rows[i].Cells[0].Controls[0]).Checked;
				string tempID = ((CheckBox)this.GridViewSearchResults.Rows[i].Cells[0].Controls[0]).ToolTip;
 
				foreach (DataRow dr in ds.Tables[0].Rows)
				{
					if (dr[this.GridViewSearchResults.DataKeyNames[0].ToString()].ToString() == tempID)
					{
						dr["chk"] = state;
					}
				}
			}
			ViewState["DataStore"] = ds;
		}		
	}
 
	//BUILD A TEMPORARY DATASET
	//FUTURE VERSIONS SHOULD USE A PROPERTY FOR THIS
	public DataSet LocalSelectAllWorkitemTypes()
	{
		DataSet ds = new DataSet();
 
		if (ViewState["DataStore"] == null)
		{
			using (SqlConnection connection = new SqlConnection(_workflowConnectionString))
			{
				using (SqlCommand command = new SqlCommand("SelectAllWorkitemTypesTEST", connection))
				{
					command.CommandType = CommandType.StoredProcedure;
					using (SqlDataAdapter adapter = new SqlDataAdapter(command))
					{
						adapter.Fill(ds);
					}
				}
			}
 
			bool chkBool = false;
 
			ds.Tables[0].Columns.Add("chk", chkBool.GetType());
 
			ViewState["DataStore"] = ds;
			return ds;
		}
		else
		{
			return (DataSet)ViewState["DataStore"];
		}
	}
 
	//CLEAR ALL COLUMNS AND REBUILD THE GRIDVIEW PROGRAMMATICALLY
	private void BuildGridView(bool ToggleSort)
	{
		DataSet ds = (DataSet)ViewState["DataStore"];
		this.GridViewSearchResults.AutoGenerateColumns = false;
		this.GridViewSearchResults.DataKeyNames = (string[])ViewState["DataKeyNames"];
		this.GridViewSearchResults.Columns.Clear();
		this.GridViewSearchResults.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
 
		CheckBoxField cbf = new CheckBoxField();
		cbf.DataField = ds.Tables[0].Columns["chk"].ToString();
		cbf.HeaderText = "";
		cbf.HeaderStyle.ForeColor = System.Drawing.Color.White;
		cbf.HeaderStyle.BackColor = System.Drawing.Color.Black;	
 
		this.GridViewSearchResults.Columns.Add(cbf);
 
		foreach (DataColumn dc in ds.Tables[0].Columns)
		{
			if (dc.ColumnName != "chk")
			{
			
				BoundField bf = new BoundField();				
				
				
 
				bf.HeaderText = dc.ColumnName;
				bf.DataField = dc.ColumnName;
				bf.HeaderStyle.ForeColor = System.Drawing.Color.White;
				bf.HeaderStyle.BackColor = System.Drawing.Color.Black;
				bf.SortExpression = dc.ColumnName;
 
				this.GridViewSearchResults.Columns.Add(bf);
			}
		}
 
		string sortExp = (string)ViewState["SortExp"];
		SortDirection sd = (SortDirection)ViewState["SortDir"];
		string sortDir = "";
 
		if (ToggleSort)
		{
			if (sd == SortDirection.Ascending)
			{
				sortDir = " DESC";
				ViewState["SortDir"] = SortDirection.Descending;
			}
			else
			{
				sortDir = " ASC";
				ViewState["SortDir"] = SortDirection.Ascending;
			}
			ds.Tables[0].DefaultView.Sort = sortExp + sortDir;
		}
		else
		{
			if (sd == SortDirection.Ascending)
			{
				sortDir = " ASC";
			}
			else
			{
				sortDir = " DESC";
			}
			ds.Tables[0].DefaultView.Sort = sortExp + sortDir;
		}		
		
		this.GridViewSearchResults.DataSource = ds.Tables[0].DefaultView;
		this.GridViewSearchResults.PageIndex = (int)ViewState["PageIndex"];	
		ViewState["DataStore"] = ds;
		this.GridViewSearchResults.DataBind();
	}
 
	//TOGGLE THE "CHECK ALL" STATE ON OR OFF
	private void HandleCheckAllClick(bool statepassedin)
	{
		DataSet ds = (DataSet)ViewState["DataStore"];
 
		foreach (DataRow dr in ds.Tables[0].Rows)
		{
			if (dr["chk"] != null)
			{
				dr["chk"] = statepassedin;
			}
		}
 
		ViewState["DataStore"] = ds;		
		BuildGridView(false);
	}
 
	protected void GridViewSearchResults_RowDataBound( object sender, GridViewRowEventArgs e)
	{
		//ADD CHECKBOX TO HEADER ROW (TO SUPPORT "CHECK ALL" FUNCTIONALITY)
		if (e.Row.RowType == DataControlRowType.Header)
		{
			try
			{
				CheckBox cb = new CheckBox();
				cb.ID = "newchecked";
				cb.Attributes.Add("onclick", "CheckAllClicked(this)");				
				TableCell tc = new TableCell();
 
				tc.ID = "tc";
				tc.BackColor = System.Drawing.Color.Black;
				tc.Style.Add("border-bottom-style", "none");				
				e.Row.Cells.AddAt(0, tc);
				e.Row.Cells[0].Controls.Add(cb);
				e.Row.ToolTip = "header";
			}
			catch (Exception ee)
			{
				System.Diagnostics.Debug.WriteLine(ee.ToString());
			}
		}
 
		//ADD TOOLTIP (DATA KEY NAMES) TO CHECKBOX FOR USE LATER WHILE GATHERING CHECK BOX STATE
		if (e.Row.RowType == DataControlRowType.DataRow)
		{
			((CheckBox)((TableCell)((DataControlFieldCell)e.Row.Cells[0])).Controls[0]).Enabled = true;
			string ID = ((DataRowView)e.Row.DataItem)[this.GridViewSearchResults.DataKeyNames[0]].ToString();
			((CheckBox)((TableCell)((DataControlFieldCell)e.Row.Cells[0])).Controls[0]).ID = "rowCB" + ID;
			((CheckBox)((TableCell)((DataControlFieldCell)e.Row.Cells[0])).Controls[0]).ToolTip = ID;
		}
 
 
		//BUILD CUSTOM PAGER
		if (e.Row.RowType == DataControlRowType.Pager)
		{
			DataSet ds = new DataSet();
 
			ds = (DataSet)ViewState["DataStore"];
 
			if (ds.Tables[0].Rows.Count > 0)
			{
				int recordcount = ds.Tables[0].Rows.Count;
				int pagecount = recordcount / this.GridViewSearchResults.PageSize;
 
				for (int i = 0; i <= pagecount; i++)
				{
					Button pagerBtn = new Button();
					
					pagerBtn.Attributes.Add("onclick", "RespondToPagerClick(this)");
					pagerBtn.ID = "pagerBtn" + i.ToString();
 
					pagerBtn.Text = (i + 1).ToString();
 
 
					if (ViewState["PageIndex"] != null)
					{
						if (i == (int)ViewState["PageIndex"])
						{
							pagerBtn.Enabled = false;
							pagerBtn.Style.Add(HtmlTextWriterStyle.BorderColor, "Red");
						}
						else
						{
							pagerBtn.Enabled = true;
						}
					}
 
					PlaceHolder ph = (PlaceHolder)e.Row.FindControl("phPager");
 
					Label countItems = (Label)e.Row.FindControl("LabelTotalWorkItems");
 
					countItems.Text = ("(" + recordcount.ToString() + " total results)");
 
					ph.Controls.Add(pagerBtn);
				}
			}
		}
	}
		
 
	protected void GridViewSearchResults_Sorting( object sender, GridViewSortEventArgs e )
	{
		ViewState["SortExp"] = e.SortExpression;		
		BuildGridView(true);	
	}
}
[+][-]08.14.2008 at 03:50PM PDT, ID: 22234953

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08.15.2008 at 08:39AM PDT, ID: 22239153

View this solution now by starting your 30-day free trial. Setting up your free trial is quick, easy, and secure. We will return you to this solution, unlocked, when you're done.

 

About this solution

Zone: Programming for ASP.NET
Sign Up Now!
Solution Provided By: prairiedog
Participating Experts: 1
Solution Grade: A
 
 
[+][-]08.15.2008 at 10:18AM PDT, ID: 22239983

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
 
Loading Advertisement...
20081112-EE-VQP-44 / EE_QW_EXPERT_20070906