Advertisement

08.08.2008 at 05:53PM PDT, ID: 23634459
[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!

8.9

Gathering Form Data

Asked by knowlton in Programming for ASP.NET

I have a GridView that I am building in the code-behind (in the .cs file not in the aspx HTML markup)

The GridView has 4 columns...3 BoundFields, and then another column where I programmatically add a CheckBox for each row using the RowDataBound event.

I can get the checkboxes column to show up in the GridView.  I can check and uncheck them.  But when I go from one page to another...say from records 1 thru 10 to records 11 through 20 ...  the same checkboxes that were checked in the 1 thru 10 set are now checked in the 11 thru 20 set!!  Even though I have not yet seen or clicked on any checkboxes for the 11 thru 20 records!!!!  So it is maintaining the checks positionally across Page changes.

What I want is to be preserving the checkbox state in the datasource and having the checked / unchecked state come from the datasource, not from the form view state.


How can I do this?

How do I gather the checked / unchecked state for the 100 records as I go from one page to another?


I am just not understanding how to gather all the information so that when I postback ...  for each row ... I can know if the checkbox was checked.


My code is included.

Thanks.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:
CODE BEHIND:
 
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;
 
public partial class UserControls_Workflow_CO2SearchResults : System.Web.UI.UserControl
{
	private string _workflowConnectionString = ConfigurationManager.ConnectionStrings["WORKFLOWConnection"].ConnectionString;
 
	protected ASP.PagerButton pagerBtn;
 
	protected void Page_Init( object sender, EventArgs e )
	{
		this.GridViewSearchResults.Sorting += null;
		this.GridViewSearchResults.Sorting += new GridViewSortEventHandler(this.GridViewSearchResults_Sorting);
	}
 
	protected void Page_Load( object sender, EventArgs e )
	{
		bool DoBuildGridView = true;
 
		string[] DataKeyNames = { "ID" };
 
		if (!Page.IsPostBack)
		{
			Cache.Remove("DataStore");
			Session["sortDir"] = SortDirection.Ascending;
		}
 
 
		string tempArgument = Request.Params.Get("__EVENTARGUMENT");
 
		if (tempArgument == "PAGERBUTTON")
		{
			string newvalue = Request.Params.Get("__EVENTTARGET");
			GridViewSearchResults.PageIndex = Int32.Parse(newvalue);
//			GridViewSearchResults_PageIndexChanging(Int32.Parse(newvalue), DataKeyNames);
			Session["curPagerBtn"] = newvalue;
			//DoBuildGridView = false;
		}
				
 
		if (tempArgument == "CHECKBOX")
		{
			string newvalue = Request.Params.Get("__EVENTTARGET");		
		}
 
 
		if (DoBuildGridView)
		{
			this.BuildGridView(LocalSelectAllWorkitemTypes(), DataKeyNames);
		}
		
 
		
		
	}
 
 
	public DataView LocalSelectAllWorkitemTypes()
	{
		DataSet ds = new DataSet();
 
		if (Cache["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);
					}
				}
			}
						
			
			//ds.Tables[0].Columns.Add("chk", typeof(CheckBoxField));
 
			CheckBox cb = new CheckBox();
			cb.Checked = true;
			cb.Visible = true;
			ds.Tables[0].Columns.Add("chk", typeof(CheckBox));
						
			DataView dv = new DataView(ds.Tables[0]);
			Cache["DataStore"] = dv;
			return dv;
		}
		else
		{
			return (DataView)Cache["DataStore"];
		}
	}
 
	private void BuildGridView(DataView dv, string[] DataKeyNames)
	{
		this.GridViewSearchResults.AutoGenerateColumns = false;
		this.GridViewSearchResults.DataKeyNames = DataKeyNames;
		this.GridViewSearchResults.Columns.Clear();
		this.GridViewSearchResults.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
			
		TemplateField tf = new TemplateField();
 
 
		foreach (DataColumn dc in dv.Table.Columns)
		{
 
			//if (dc.DataType.UnderlyingSystemType.ToString() == "System.Web.UI.WebControls.CheckBox")
			//{
			//  tf.HeaderTemplate = new GridViewCheckBoxColumn(5);
			//  tf.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
				
			//  tf.HeaderStyle.ForeColor = System.Drawing.Color.White;
			//  tf.HeaderStyle.BackColor = System.Drawing.Color.Black;				
			//  tf.ItemStyle.VerticalAlign = VerticalAlign.Top;				
			//  tf.ItemTemplate = new GridViewCheckBoxColumn(5);						
			//}
			//else
			//{
				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);
		//	}
		}
 
		this.GridViewSearchResults.Columns.Insert(0, tf);
 
		this.GridViewSearchResults.DataSource = dv;
 
		Cache["DataStore"] = dv;
 
		this.GridViewSearchResults.DataBind();
 
	//	dv.Table.Clear();
 
		dv.Table = ((DataView)this.GridViewSearchResults.DataSource).Table;
 
		Cache["DataStore"] = dv;
 
 
		foreach (DataRow dr in dv.Table.Rows)
		{
			System.Diagnostics.Debug.WriteLine(dr["chk"].GetType().ToString());
		}
	}
 
	protected void GridViewSearchResults_RowDataBound( object sender, GridViewRowEventArgs e )
	{
 
		if ((e.Row.RowType == DataControlRowType.DataRow) || (e.Row.RowType == DataControlRowType.Header))
		{
			DataView dv = new DataView();
 
			dv = (DataView)Cache["DataStore"];
			
			CheckBox cb = new CheckBox();
			cb.Checked = true;
			cb.EnableViewState = true;
 
			TableCell tc = new TableCell();
 
			if (e.Row.RowType == DataControlRowType.Header)
			{
				tc.BackColor = System.Drawing.Color.Black;
				tc.ForeColor = System.Drawing.Color.White;
			}
			else
			{
				string t = e.Row.Cells[0].Text;				
				cb.Text = t;
				cb.ToolTip = t;
			}
			
			e.Row.Cells.AddAt(0, tc);
			e.Row.Cells[0].Controls.Add(cb);
 
			//DataSet ds = new DataSet();
			//DataTable dt = new DataTable();
			//ds.Tables.Add(dt);
 
		//	foreach (DataRow dr in dv.Table.Rows)
		//	{
			//	ds.Tables[0].Rows.Add(dr);
		//	}
			//dv.Table.Columns[3]
 
			
 
			int i = dv.Table.Columns.IndexOf("chk");
		}	
 
		if (e.Row.RowType == DataControlRowType.Pager)
		{
			DataView dv = new DataView();
 
			dv = (DataView)Cache["DataStore"];
 
			if(dv.Table.Rows.Count > 0)
			{
				int recordcount = dv.Table.Rows.Count;
				int pagecount = recordcount / this.GridViewSearchResults.PageSize;
				
				for (int i = 0; i <= pagecount; i++)
				{
					pagerBtn = (ASP.PagerButton)LoadControl("~/UserControls/Workflow/PagerButton.ascx");
					pagerBtn.SetButtonText = i.ToString();
 
					pagerBtn.SetButtonText = i.ToString();
 
					if (Session["curPagerBtn"] != null)
					{
						if (i.ToString() == (string)Session["curPagerBtn"])
						{							
							pagerBtn.PagerButton.Enabled = false;
						//	pagerBtn.PagerButton.Style.Add(HtmlTextWriterStyle.BackgroundColor, "Blue");
							pagerBtn.PagerButton.Style.Add(HtmlTextWriterStyle.BorderColor, "Red");
						}
						else
						{						
							pagerBtn.PagerButton.Enabled = true;
						}
					}
 
					PlaceHolder ph = (PlaceHolder)e.Row.FindControl("phPager");
 
					Label countItems = (Label)e.Row.FindControl("LabelTotalWorkItems");
 
					countItems.Text = ("(" + recordcount.ToString() + " total work items)");
					
					ph.Controls.Add(pagerBtn);
				}
			}
		}		
	}
 
 
	private void RememberOldValues()
	{
		ArrayList categoryIDList = new ArrayList();
		int index = -1;
		foreach (GridViewRow row in GridViewSearchResults.Rows)
		{
			index = (int)GridViewSearchResults.DataKeys[row.RowIndex].Value;
		//	bool result = ((CheckBox)row.FindControl("FRED")).Checked;
 
			bool result = ((CheckBox)((DataControlFieldCell)row.Cells[0]).Controls[0]).Checked;
			// Check in the Session
			if (Session["CHECKED_ITEMS"] != null)
				categoryIDList = (ArrayList)Session["CHECKED_ITEMS"];
			if (result)
			{
				if (!categoryIDList.Contains(index))
					categoryIDList.Add(index);
			}
			else
				categoryIDList.Remove(index);
		}
		if (categoryIDList != null && categoryIDList.Count > 0)
			Session["CHECKED_ITEMS"] = categoryIDList;
	}
 
 
	private void RePopulateValues()
	{
		ArrayList categoryIDList = (ArrayList)Session["CHECKED_ITEMS"];
		if (categoryIDList != null && categoryIDList.Count > 0)
		{
			foreach (GridViewRow row in GridViewSearchResults.Rows)
			{
				int index = (int)GridViewSearchResults.DataKeys[row.RowIndex].Value;
				if (categoryIDList.Contains(index))
				{
					CheckBox myCheckBox = (CheckBox)row.FindControl("chk");
					myCheckBox.Checked = true;
				}
			}
		}
	}
 
 
	protected void GridViewSearchResults_Sorting( object sender, GridViewSortEventArgs e )
	{
		DataView dv = new DataView();
		dv = (DataView)Cache["DataStore"];				
 
		SortDirection sd = SortDirection.Ascending;
		string newDir = "ASC";
 
		if (Session["sortDir"] != null)
		{
			sd = (SortDirection)Session["sortDir"];		
 
			if (sd == SortDirection.Ascending)
			{
				newDir = "DESC";
				Session["sortDir"] = SortDirection.Descending;
			}
			else
			{
				newDir = "ASC";
				Session["sortDir"] = SortDirection.Ascending;
			}			
		}
		else
		{			
 
			if (e.SortDirection == SortDirection.Ascending)
			{
				newDir = "ASC";				
			}
			else
			{
				newDir = "DESC";
			}
 
			Session["sortDir"] = e.SortDirection;
		}		
 
		string sortExp = e.SortExpression + " " + newDir;
		
		dv.Sort = sortExp;
 
		string[] DataKeyNames = { "ID" };
 
		Cache["DataStore"] = dv;
 
		BuildGridView(dv, DataKeyNames);
	}
 
 
 
	private void GridViewSearchResults_PageIndexChanging(int NewIndex, string[] DataKeyNames)
	{
		//RememberOldValues();
		GridViewSearchResults.PageIndex = NewIndex;
		BuildGridView((DataView)Cache["DataStore"], DataKeyNames);		
		//RePopulateValues();
	}
	protected void GridViewSearchResults_RowCreated( object sender, GridViewRowEventArgs e )
	{
		
	}
}
 
 
public class GridViewCheckBoxColumn : ITemplate
{
	private int _id;
	public GridViewCheckBoxColumn(int ID)
	{
		_id = ID;		
	}
 
	public void InstantiateIn( Control container )
	{
		CheckBox cb = new CheckBox();
		cb.Checked = false;
		cb.EnableViewState = true;		
		//cb.DataBinding += new EventHandler(this.BindChecklistColumn);
		container.Controls.Add(cb);
	}
 
	public void BindChecklistColumn( object sender, EventArgs e )
	{
		CheckBox cb = (CheckBox)sender;
		GridViewRow container = (GridViewRow)cb.NamingContainer;
		cb.ID = Convert.ToString(DataBinder.Eval(((GridViewRow)container).DataItem, "chk"));
	}
}
[+][-]08.08.2008 at 05:54PM PDT, ID: 22194636

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 7-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08.11.2008 at 04:22PM PDT, ID: 22209056

Experts Exchange has a courteous staff of administrators who help members get the most out of the website by means of administrative comments like this one.

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

 
[+][-]08.11.2008 at 04:35PM PDT, ID: 22209125

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 7-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08.11.2008 at 04:36PM PDT, ID: 22209130

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 7-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08.11.2008 at 10:30PM PDT, ID: 22210273

View this solution now by starting your 7-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: renjurdevan
Participating Experts: 1
Solution Grade: A
 
 
[+][-]08.12.2008 at 03:22PM PDT, ID: 22217639

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 7-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]08.12.2008 at 03:23PM PDT, ID: 22217640

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 7-day free trial to view this Author Comment or ask the Experts your question.

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