Requirements |
|
RadControls version | |
.NET version | 3.5 |
Visual Studio version | 2008 |
programming language | C# |
browser support |
all browsers supported by RadControls |
PROJECT DESCRIPTION
This code can be used on a RadGrid to allow Check/Uncheck of items. If a single row checkbox is checked, it posts back saving the checked value to the database. If the CheckAll is selected, it loops through saving the checked value of each row to the applicable row in the database.
Assumptions:
- Using a custom Entity model
- all methods to get and save data on entity model (NOT INCLUDED IN CODE BELOW)
- You have a field in the database called "IsActive"
---- GRID HTML -----
OnPreRender="RadGrid1_PreRender"
<Columns>
<telerik:GridTemplateColumn UniqueName="CheckBoxColumn" HeaderText="Blocked">
<HeaderTemplate>
<asp:CheckBox ID="CheckAll" AutoPostBack="true" OnCheckedChanged="CheckAll_CheckChanged" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox id="CheckBox1" OnCheckedChanged="CheckBox1_CheckChanged" AutoPostBack="True" runat="server"></asp:CheckBox>
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
------ CODE BEHIND --------
#region Members
DataTable _gridData = null;
#endregion
#region Properties
/// <summary>
/// locally cache grid data table - did this so I could set the checkbox values
/// </summary>
private DataTable GridData
{
get
{
if (_gridData == null)
{
_gridData = MyEntity.GetGridData();
}
return _gridData;
}
}
#endregion
#region Custom Methods
private void CheckAll(string checkBoxValue)
{
foreach (GridItem item in RadGrid1.Items)
{
SaveCheckValueChanges(item, checkBoxValue);
}
}
/// <summary>
/// Updates entity with current Checked value
/// </summary>
/// <param name="item"></param>
private void SaveCheckValueChanges(GridItem item)
{
SaveCheckValueChanges(item, null);
}
/// <summary>
/// Updates entity with current Checked value
/// </summary>
/// <param name="item"></param>
private void SaveCheckValueChanges(GridItem item, string defaultBlockedValue)
{
if (item is GridEditableItem)
{
CheckBox IsActive = item.FindControl("IsActive") as CheckBox;
string ID = item.OwnerTableView.DataKeyValues[item.ItemIndex][MyEntity.DBFieldName.ID.ToString()].ToString();
MyEntity entity = MyEntity.GetByPrimaryKey(ID);
if (!String.IsNullOrEmpty(defaultBlockedValue))
{
entity.IsActive = defaultBlockedValue;
}
else
{
entity.IsActive = IsActive.Checked.ToString();
}
entity.SaveData();
}
}
/// <summary>
/// Update grid checkboxes. Set checked=true for each selected item
/// </summary>
/// <param name="dt">DataTable representing bound grid items</param>
public void SetSelectedGridItems(DataTable dt)
{
foreach (DataRow dr in dt.Rows)
{
foreach (GridItem item in RadGrid1.Items)
{
GridDataItem dataitem = (GridDataItem)item;
if (dataitem[MyEntity.DBFieldName.ID.ToString()].Text.Equals(dr[MyEntity.DBFieldName.ID.ToString()].ToString()))
{
//check row
CheckBox checkBox = item.FindControl(MyEntity.DBFieldName.IsActive.ToString()) as CheckBox;
checkBox.Checked = ConvertValueToBoolean(dr[MyEntity.DBFieldName.IsActive.ToString()].ToString());
break;
}
}
}
}
#endregion
#region Page Events
protected void RadGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
RadGrid1.DataSource = this.GridData;
RadGrid1.MasterTableView.DataKeyNames = new string[] { MyEntity.DBFieldName.ID.ToString() };
}
protected void CheckAll_CheckChanged(object sender, EventArgs e)
{
CheckBox checkBox = sender as CheckBox;
if (checkBox != null)
{
CheckAll(checkBox.Checked.ToString());
}
}
protected void CheckBox1_CheckChanged(object sender, EventArgs e)
{
GridItem item = (sender as CheckBox).Parent.Parent as GridItem;
SaveCheckValueChanges(item);
}
protected void RadGrid1_PreRender(object sender, EventArgs e)
{
//use locally cached data table to set IsActive checkboxes on grid
SetSelectedGridItems(this.GridData);
}
#endregion