Hi All,
I have written a class "CheckBoxTemplate" that implements ITemplate interface.
At runtime, using this class I add a column to the gridview.
Now I have "next" link and i have implemented the click eventhandler. In the eventhandler i iterate each row but I don't know how to get the "Checked" property of the CheckBoxTemplate.
Please help me in this regard. I have already wasted two days on this thing, and it is now frustrating me alot :(
Yeah I am using ASP.NET. Sorry for confusion.
would post the code that will be more helpful
Here is my CheckBoxTemplate class:
Yeah I am using ASP.NET. Sorry for confusion.
would post the code that will be more helpful
Here is my CheckBoxTemplate class:
public class CheckBoxTemplate: ITemplate
{
private string id;
CheckBox box;
public bool Checked
{
get { return box.Checked; }
set { box.Checked = value; }
}
public string ID
{
get { return id; }
set { id = value; }
}
public CheckBoxTemplate(bool editable)
{
readOnly = (editable == true) ? false : true;
}
void ITemplate.InstantiateIn(Control container)
{
box = new CheckBox();
box.ID = id;
box.DataBinding += new EventHandler(this.BindData);
box.AutoPostBack = autoPostBack;
box.CheckedChanged += new EventHandler(this.OnCheckChanged);
container.Controls.Add(box);
}
public event EventHandler CheckedChanged;
private void OnCheckChanged(object sender, EventArgs e)
{
if (CheckedChanged != null)
{
CheckedChanged(sender, e);
}
}
private string dataField;
public string DataField
{
get
{
return dataField;
}
set
{
dataField = value;
}
}
private bool autoPostBack = false;
public bool AutoPostBack
{
set
{
autoPostBack = value;
}
get
{
return autoPostBack;
}
}
private void BindData(object sender, EventArgs e)
{
CheckBox box = (CheckBox)sender;
GridViewRow container = (GridViewRow)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;
}
}
}
private bool readOnly = true;
}
And this is how I am adding it to the gridview <TemplateField>:
private void ResetGridView()
{
BoundField rn = new BoundField();
rn.DataField = "ResultNumber";
rn.HeaderText = "Result Number";
BoundField ac = new BoundField();
ac.DataField = "AccountNumber";
ac.HeaderText = "Account Number";
BoundField cc = new BoundField();
cc.DataField = "CardNumber";
cc.HeaderText = "Credit Card";
CommandField cf = new CommandField();
cf.ItemStyle.VerticalAlign = VerticalAlign.Middle;
cf.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
cf.ShowHeader = true;
cf.HeaderText = "Actions";
cf.SelectText = "Print";
cf.DeleteText = "Email";
cf.ShowDeleteButton = false;
cf.ShowSelectButton = false;
cf.ShowCancelButton = false;
cf.ShowEditButton = false;
BoundField ri = new BoundField();
ri.DataField = "ResultIndex";
ri.HeaderText = "Result Index";
gvBoResults.Columns.Clear();
TemplateField cbf = new TemplateField();
CheckBoxTemplate t = new CheckBoxTemplate(true);
t.ID = "myCheckBox";
t.DataField = "select";
cbf.ItemTemplate = t;
gvBoResults.Columns.Add(cbf);
gvBoResults.Columns.Add(rn);
if (SearchType == SearchType.CreditCard)
gvBoResults.Columns.Add(cc);
else
gvBoResults.Columns.Add(ac);
gvBoResults.Columns.Add(cf);
gvBoResults.Columns.Add(ri);
}
And the problematic part:
private void GetCheckedRows()
{
foreach (GridViewRow r in gvBoResults.Rows)
{
}
}