| | |
Adding a checkbox column dynamically
Please support our C# advertiser: Intel Parallel Studio Home
![]() |
•
•
Join Date: Jul 2004
Posts: 1
Reputation:
Solved Threads: 0
Hope someone can help with this....
I recently incorporated these two classes into my code which dynamically adds a checkbox column to my datagrid.
public class CheckBoxItem: ITemplate
{
/// <summary>
/// The CheckBoxItem constructor
/// </summary>
/// <param name="editable">true if the item is to be in its editable state, false for the item to be disabled.</param>
public CheckBoxItem(bool editable)
{
readOnly = (editable==true)?false:true;
}
/// <summary>
/// Instantiates the CheckBox that we wish to represent in this column.
/// </summary>
/// <param name="container">The container into which the control or controls are added.</param>
void ITemplate.InstantiateIn(Control container)
{
CheckBox box = new CheckBox();
box.DataBinding += new EventHandler(this.BindData);
box.AutoPostBack = autoPostBack;
box.CheckedChanged += new EventHandler(this.OnCheckChanged);
container.Controls.Add(box);
}
/// <summary>
/// Our CheckChanged event
/// </summary>
public event EventHandler CheckedChanged;
/// <summary>
/// This is a common handler for all the Checkboxes.
/// </summary>
/// <param name="sender">The raiser of this event a CheckBox.</param>
/// <param name="e">A System.EventArgs that contains the event data.</param>
private void OnCheckChanged(object sender, EventArgs e)
{
if (CheckedChanged != null)
{
CheckedChanged(sender, e);
}
}
// private void OnCheckChanged(object sender, EventArgs e)
//{
// CheckBox box = (CheckBox) sender;
//DataGridItem container = (DataGridItem) box.NamingContainer;
// sqlUpdateCommand1.Parameters["@Object_id"].Value
// = int.Parse(container.Cells[0].Text);
// sqlUpdateCommand1.Parameters["@Boolean"].Value = box.Checked;
// ...
//
// }
/// <summary>
/// The internal storage for which DataField we are going to represent.
/// </summary>
private string dataField;
/// <summary>
/// Used to set the DataField that we wish to represent with this CheckBox.
/// </summary>
public string DataField
{
get
{
return dataField;
}
set
{
dataField=value;
}
}
private string val;
public string Val
{
get
{
return val;
}
set
{
val = value;
}
}
/// <summary>
/// The internal storage for the AutoPostback flag.
/// </summary>
private bool autoPostBack=false;
/// <summary>
/// Set the AutoPostBack flag. If this is true then each time a CheckBox is clicked
/// in the Column that contains this item then an event is raised on the server.
/// </summary>
public bool AutoPostBack
{
set
{
autoPostBack = value;
}
get
{
return autoPostBack;
}
}
/// <summary>
/// Handler for the DataBinding event where we bind the data for a specific row
/// to the CheckBox.
/// </summary>
/// <param name="sender">The raiser of the event.</param>
/// <param name="e">A System.EventArgs that contains the event data.</param>
private void BindData(object sender, EventArgs e)
{
CheckBox box = (CheckBox) sender;
DataGridItem container = (DataGridItem) box.NamingContainer;
box.Checked = false;
box.Enabled = (readOnly == true) ? false:true;
string data = ((DataRowView) container.DataItem)[dataField].ToString();
Type t = ((DataRowView)container.DataItem).DataView.Table.Columns[dataField].DataType;
if (data.Length>0)
{
switch (t.ToString())
{
case "System.Boolean":
if (( data == "True") || (data == "true"))
{
box.Checked = true;
}
break;
default:
break;
}
}
}
/// <summary>
/// Internal storage for the readOnly flag.
/// </summary>
private bool readOnly = true;
}
public class CheckBoxColumn
ystem.Web.UI.WebControls.TemplateColumn
{
/// <summary>
/// Initialise our CheckBoxColumn.
/// </summary>
public CheckBoxColumn()
{
// set the view one as readonly
viewItem = new CheckBoxItem(false); // SAW was false
this.ItemTemplate = viewItem as ITemplate;
// let the edit check box be editable
editItem = new CheckBoxItem(true);
this.EditItemTemplate = editItem as ITemplate;
}
/// <summary>
/// Initialise our CheckBoxColumn with an optional ImmediatePostback capability.
/// </summary>
/// <param name="ImmediatePostback">If true then each change of state of the CheckBox item
/// will cause an event to be fired immediately on the server.</param>
public CheckBoxColumn(bool ImmediatePostback)
{
// set the view one as readonly
viewItem = new CheckBoxItem(ImmediatePostback);
this.ItemTemplate = viewItem as ITemplate;
// let the edit check box be editable
editItem = new CheckBoxItem(true);
this.EditItemTemplate = editItem as ITemplate;
AutoPostBack = ImmediatePostback;
}
/// <summary>
/// Occurs when the value of the Checked property changes between posts to the server.
/// </summary>
/// <remarks>
/// The <b>CheckedChanged</b> event is raised when the value of the Checked property changes between posts to the server.
///
/// <b>Note</b> This event does not post the page back to the server unless the AutoPostBack property is set to true.
/// <b>Note</b> The control must have viewstate enabled for the <b>CheckedChanged</b> event to work correctly.
/// </remarks>
public event EventHandler CheckedChanged
{
add
{
viewItem.CheckedChanged += value;
editItem.CheckedChanged += value;
}
remove
{
viewItem.CheckedChanged -= value;
editItem.CheckedChanged -= value;
}
}
/// <summary>
/// If true then then each click on a CheckBox will cause an event to be fired on the server.
/// </summary>
public bool AutoPostBack
{
set
{
viewItem.AutoPostBack = value;
editItem.AutoPostBack = value;
}
get
{
return viewItem.AutoPostBack;
}
}
/// <summary>
/// The DataField that we wish our control to bind to.
/// </summary>
public string DataField
{
get
{
return viewItem.DataField;
}
set
{
viewItem.DataField = value;
editItem.DataField = value;
}
}
/// <summary>
/// Internal storage of the CheckBoxItem that is to be used for the view state.
/// </summary>
private CheckBoxItem viewItem;
/// <summary>
/// Internal storage of the CheckBoxItem that is to be used for the edit state.
/// </summary>
private CheckBoxItem editItem;
}
Before I this checkbox column/item code, I simply had 2 columns in my datagrid, one column was the "select" in which the client would click, and I used btnSelect_Clicked (able to create in my html-generated code) as my handler, and the other was an "active" column which changed everytime I clicked the respective dataGrid row (grid.SelectedIndex). Now since I changed my code to incorporate the checkbox column, I can't seem to extract the necessary "true/false" data. Maybe it is within the OncheckedChanged function?? I cannot for the life of me figure out how to retrieve some sort of variable to check if the box is checked (true) or unchecked (false). I see box.Checked... but that is not accessible when accessing the actual datagrid. Maybe it would be better for me if you can answer the question: can you specifically pull the checkbox data with a certain cell in the datagrid and use that certain variable to check if it is true/false?? I tried something like
if(dataTbl.Rows[grdResults.SelectedIndex]["Boolean"].ToString() == "true")
{currentCustomer.CustomerDiscounts[grdResults.SelectedIndex].ActiveFlag = true;
else
{currentCustomer.CustomerDiscounts[grdResults.SelectedIndex].ActiveFlag = false;
(I'm trying to set my ActiveFlag field in respect to the respective CheckBox field that is changed)
Thanks in advance!!
I recently incorporated these two classes into my code which dynamically adds a checkbox column to my datagrid.
public class CheckBoxItem: ITemplate
{
/// <summary>
/// The CheckBoxItem constructor
/// </summary>
/// <param name="editable">true if the item is to be in its editable state, false for the item to be disabled.</param>
public CheckBoxItem(bool editable)
{
readOnly = (editable==true)?false:true;
}
/// <summary>
/// Instantiates the CheckBox that we wish to represent in this column.
/// </summary>
/// <param name="container">The container into which the control or controls are added.</param>
void ITemplate.InstantiateIn(Control container)
{
CheckBox box = new CheckBox();
box.DataBinding += new EventHandler(this.BindData);
box.AutoPostBack = autoPostBack;
box.CheckedChanged += new EventHandler(this.OnCheckChanged);
container.Controls.Add(box);
}
/// <summary>
/// Our CheckChanged event
/// </summary>
public event EventHandler CheckedChanged;
/// <summary>
/// This is a common handler for all the Checkboxes.
/// </summary>
/// <param name="sender">The raiser of this event a CheckBox.</param>
/// <param name="e">A System.EventArgs that contains the event data.</param>
private void OnCheckChanged(object sender, EventArgs e)
{
if (CheckedChanged != null)
{
CheckedChanged(sender, e);
}
}
// private void OnCheckChanged(object sender, EventArgs e)
//{
// CheckBox box = (CheckBox) sender;
//DataGridItem container = (DataGridItem) box.NamingContainer;
// sqlUpdateCommand1.Parameters["@Object_id"].Value
// = int.Parse(container.Cells[0].Text);
// sqlUpdateCommand1.Parameters["@Boolean"].Value = box.Checked;
// ...
//
// }
/// <summary>
/// The internal storage for which DataField we are going to represent.
/// </summary>
private string dataField;
/// <summary>
/// Used to set the DataField that we wish to represent with this CheckBox.
/// </summary>
public string DataField
{
get
{
return dataField;
}
set
{
dataField=value;
}
}
private string val;
public string Val
{
get
{
return val;
}
set
{
val = value;
}
}
/// <summary>
/// The internal storage for the AutoPostback flag.
/// </summary>
private bool autoPostBack=false;
/// <summary>
/// Set the AutoPostBack flag. If this is true then each time a CheckBox is clicked
/// in the Column that contains this item then an event is raised on the server.
/// </summary>
public bool AutoPostBack
{
set
{
autoPostBack = value;
}
get
{
return autoPostBack;
}
}
/// <summary>
/// Handler for the DataBinding event where we bind the data for a specific row
/// to the CheckBox.
/// </summary>
/// <param name="sender">The raiser of the event.</param>
/// <param name="e">A System.EventArgs that contains the event data.</param>
private void BindData(object sender, EventArgs e)
{
CheckBox box = (CheckBox) sender;
DataGridItem container = (DataGridItem) box.NamingContainer;
box.Checked = false;
box.Enabled = (readOnly == true) ? false:true;
string data = ((DataRowView) container.DataItem)[dataField].ToString();
Type t = ((DataRowView)container.DataItem).DataView.Table.Columns[dataField].DataType;
if (data.Length>0)
{
switch (t.ToString())
{
case "System.Boolean":
if (( data == "True") || (data == "true"))
{
box.Checked = true;
}
break;
default:
break;
}
}
}
/// <summary>
/// Internal storage for the readOnly flag.
/// </summary>
private bool readOnly = true;
}
public class CheckBoxColumn
ystem.Web.UI.WebControls.TemplateColumn {
/// <summary>
/// Initialise our CheckBoxColumn.
/// </summary>
public CheckBoxColumn()
{
// set the view one as readonly
viewItem = new CheckBoxItem(false); // SAW was false
this.ItemTemplate = viewItem as ITemplate;
// let the edit check box be editable
editItem = new CheckBoxItem(true);
this.EditItemTemplate = editItem as ITemplate;
}
/// <summary>
/// Initialise our CheckBoxColumn with an optional ImmediatePostback capability.
/// </summary>
/// <param name="ImmediatePostback">If true then each change of state of the CheckBox item
/// will cause an event to be fired immediately on the server.</param>
public CheckBoxColumn(bool ImmediatePostback)
{
// set the view one as readonly
viewItem = new CheckBoxItem(ImmediatePostback);
this.ItemTemplate = viewItem as ITemplate;
// let the edit check box be editable
editItem = new CheckBoxItem(true);
this.EditItemTemplate = editItem as ITemplate;
AutoPostBack = ImmediatePostback;
}
/// <summary>
/// Occurs when the value of the Checked property changes between posts to the server.
/// </summary>
/// <remarks>
/// The <b>CheckedChanged</b> event is raised when the value of the Checked property changes between posts to the server.
///
/// <b>Note</b> This event does not post the page back to the server unless the AutoPostBack property is set to true.
/// <b>Note</b> The control must have viewstate enabled for the <b>CheckedChanged</b> event to work correctly.
/// </remarks>
public event EventHandler CheckedChanged
{
add
{
viewItem.CheckedChanged += value;
editItem.CheckedChanged += value;
}
remove
{
viewItem.CheckedChanged -= value;
editItem.CheckedChanged -= value;
}
}
/// <summary>
/// If true then then each click on a CheckBox will cause an event to be fired on the server.
/// </summary>
public bool AutoPostBack
{
set
{
viewItem.AutoPostBack = value;
editItem.AutoPostBack = value;
}
get
{
return viewItem.AutoPostBack;
}
}
/// <summary>
/// The DataField that we wish our control to bind to.
/// </summary>
public string DataField
{
get
{
return viewItem.DataField;
}
set
{
viewItem.DataField = value;
editItem.DataField = value;
}
}
/// <summary>
/// Internal storage of the CheckBoxItem that is to be used for the view state.
/// </summary>
private CheckBoxItem viewItem;
/// <summary>
/// Internal storage of the CheckBoxItem that is to be used for the edit state.
/// </summary>
private CheckBoxItem editItem;
}
Before I this checkbox column/item code, I simply had 2 columns in my datagrid, one column was the "select" in which the client would click, and I used btnSelect_Clicked (able to create in my html-generated code) as my handler, and the other was an "active" column which changed everytime I clicked the respective dataGrid row (grid.SelectedIndex). Now since I changed my code to incorporate the checkbox column, I can't seem to extract the necessary "true/false" data. Maybe it is within the OncheckedChanged function?? I cannot for the life of me figure out how to retrieve some sort of variable to check if the box is checked (true) or unchecked (false). I see box.Checked... but that is not accessible when accessing the actual datagrid. Maybe it would be better for me if you can answer the question: can you specifically pull the checkbox data with a certain cell in the datagrid and use that certain variable to check if it is true/false?? I tried something like
if(dataTbl.Rows[grdResults.SelectedIndex]["Boolean"].ToString() == "true")
{currentCustomer.CustomerDiscounts[grdResults.SelectedIndex].ActiveFlag = true;
else
{currentCustomer.CustomerDiscounts[grdResults.SelectedIndex].ActiveFlag = false;
(I'm trying to set my ActiveFlag field in respect to the respective CheckBox field that is changed)
Thanks in advance!!
I would try not to use ToString() instead used:
More broken down it looks like:
Hope this helps, haven't tried it yet though.
C# Syntax (Toggle Plain Text)
dataTbl.Rows[grdResults.SelectedIndex]["Boolean"].Checked == true
C# Syntax (Toggle Plain Text)
DataRow dr = dataTbl.Rows[grdResults.SelectedIndex]; bool yesNo = dr["boolean"].Checked; // this assumes that "boolean" is the name of the column if(yesNo) doStuff(); else doOtherSTuff();
Hope this helps, haven't tried it yet though.
![]() |
Similar Threads
- inserting multiple selection from checkbox in to one column (JSP)
- adding and searching newly added column...HELP PLEASE!!!!! :( (ASP)
- Adding HTML controls dynamically in asp.net page (ASP.NET)
- datagrid coantianing checkbox as column (ASP.NET)
- checkbox in datagridview c# (C#)
- Adding and deleting a column in JTable (Java)
Other Threads in the C# Forum
- Previous Thread: dot net supports for mac amchines
- Next Thread: Putting skins for my windows project
| Thread Tools | Search this Thread |
.net access algorithm array barchart bitmap box broadcast c# check checkbox client combobox control conversion csharp custom customactiondata database datagrid datagridview dataset datastructure date/time datetime datetimepicker degrees development dll draganddrop drawing encryption enum event excel file filename files form format forms function gdi+ gis gtk hash image index input install java label list listbox mandelbrot math mouseclick mysql operator outlook2003 path photoshop picturebox pixelinversion pixelminversion post programming radians regex remoting richtextbox safari server sleep snooze socket sql statistics stream string table tables tcp text textbox thread time timer update usercontrol usercontrols validation visualstudio webbrowser webcam wia windows winforms wpf xml





