Hi
I created my custom cell and column:
Cell:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
Telerik.WinControls.UI;
using
System.Windows.Forms;
using
System.Drawing;
using
System.Diagnostics;
namespace
GridViewUnboundMode
{
public
class
EditableCheckBoxCellElement : GridDataCellElement
{
private
RadCheckBoxElement _chk;
private
RadTextBoxElement _txtBox;
private
RadLabelElement _lbl;
public
EditableCheckBoxCellElement(GridViewColumn column, GridRowElement row)
:
base
(column, row)
{
}
protected
override
void
CreateChildElements()
{
base
.CreateChildElements();
_chk =
new
RadCheckBoxElement();
_chk.Margin =
new
Padding(0, 2, 0, 0);
_chk.MinSize =
new
Size(20, 20);
_chk.Text =
string
.Empty;
_chk.ToggleState = Telerik.WinControls.Enumerations.ToggleState.Off;
_chk.ToggleStateChanged +=
new
StateChangedEventHandler(_chk_ToggleStateChanged);
_txtBox =
new
RadTextBoxElement();
_txtBox.Margin =
new
Padding(0, 2, 0, 0);
_txtBox.MinSize =
new
Size(10, 20);
_txtBox.Text =
"sss"
;
_lbl =
new
RadLabelElement();
_lbl.Text =
"Not assigned"
;
_lbl.Margin =
new
Padding(0, 4, 0, 0);
_lbl.MinSize =
new
Size(1, 20);
_lbl.TextWrap =
false
;
_lbl.Font =
new
Font(_lbl.Font.Name, _lbl.Font.Size, FontStyle.Italic);
_lbl.ForeColor = Color.Gray;
this
.Children.Add(_chk);
this
.Children.Add(_lbl);
}
void
_chk_ToggleStateChanged(
object
sender, StateChangedEventArgs args)
{
if
(_chk.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On)
{
if
(
this
.Children.Contains(_lbl))
{
this
.Children.Remove(_lbl); }
this
.Children.Add(_txtBox);
}
else
if
(_chk.ToggleState == Telerik.WinControls.Enumerations.ToggleState.Off)
{
if
(
this
.Children.Contains(_txtBox))
{
this
.Children.Remove(_txtBox); }
this
.Children.Add(_lbl);
}
}
protected
override
SizeF ArrangeOverride(SizeF finalSize)
{
if
(
this
.Children.Count == 2)
{
this
.Children[0].Arrange(
new
RectangleF(0, 0, 20, 20));
this
.Children[1].Arrange(
new
RectangleF(21, 0, finalSize.Width - 28, 20));
if
(
this
.Children[1] == _lbl)
{ _lbl.MinSize =
new
Size(Convert.ToInt32(finalSize.Width - 28), 20); }
}
return
finalSize;
}
public
override
object
Value
{
get
{
return
_txtBox.Text;
}
set
{
_txtBox.Text = value.ToString();
}
}
public
bool
IsChecked
{
get
{
return
_chk.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On;
}
set
{
if
(value)
{ _chk.ToggleState = Telerik.WinControls.Enumerations.ToggleState.On; }
else
{ _chk.ToggleState = Telerik.WinControls.Enumerations.ToggleState.Off; }
}
}
}
}
Column:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
Telerik.WinControls.UI;
namespace
GridViewUnboundMode
{
public
class
EditableCheckBoxColumn : GridViewDataColumn
{
public
EditableCheckBoxColumn():
base
()
{
}
public
override
Type GetCellType(GridViewRowInfo row)
{
if
(row
is
GridViewDataRowInfo)
{
return
typeof
(EditableCheckBoxCellElement);
}
return
base
.GetCellType(row);
}
}
}
When I create new row I do something like this:
private
void
btnAddNewRows_Click(
object
sender, EventArgs e)
{
GridViewRowInfo rowInfo =
this
.radGridView1.Rows.AddNew();
int
columnIndex = 0;
int
rowIndex = rowInfo.Index;
foreach
(GridViewCellInfo cellInfo
in
rowInfo.Cells)
{
cellInfo.Value =
string
.Format(
"{0}-{1}"
, columnIndex, rowIndex);
columnIndex++;
}
}
The problem is that in this loop when I set GridViewCellInfo.Value to some value, property EditableCheckBoxCellElement.Value is not set to this value.
I also don`t know how to get access to EditableCheckBoxCellElement because I need to control property EditableCheckBoxCellElement.IsChecked.
How can I control values for controls that are inside my EditableCheckBoxCellElement?
Data binding is not an option in my case.
Regards