Checkbox Databinding

2 posts, 0 answers
  1. Ji -Won
    Ji -Won avatar
    6 posts
    Member since:
    Sep 2011

    Posted 22 Mar 2012 Link to this post

    Hello..
    Im using radtreeview with my own class.
    that class is like this
    class TestClass
    {
    public IsChecked{get;set;}
    public Name{get;set;}
    }

    I used 
    radTreeView1.CheckBoxes=true;
    radTreeView1.DataSource=bindingList;
    radTreeView1.DisplayMember = 
    "Name";


    I Want if IsChecked Property changed that node's checkstate change.
    even I change Checkboxstate make IsChecked change.
    but I couldn find bind to CheckboxState..
    How Can I bind this data..
    please help me and give me solution.. Thanks.
  2. Stefan
    Admin
    Stefan avatar
    2891 posts

    Posted 27 Mar 2012 Link to this post

    Hello Ji -Won,

    Thank you for writing.

    The easiest way to bind the checked field of your class to the nodes check boxes, is to use the NodeFormatting event to set the node check box state and the MouseDown event, of RadTreeView to change the IsChecked field state. With this approach, you need to have in mind that in order to reflect changes to the IsChecked property of an object, you need to call the Update method of the TreeViewElement, which will execute the NodeFormatting event, thus the check boxes will be reassigned. 

    Here is a small sample:
    public partial class Form1 : Form
     {
         BindingList<TestClass> bindingList = new BindingList<TestClass>();
     
         public Form1()
         {
             InitializeComponent();
     
             bindingList.Add(new TestClass() { IsChecked = false, Name = "Node 1" });
             bindingList.Add(new TestClass() { IsChecked = true, Name = "Node 2" });
             bindingList.Add(new TestClass() { IsChecked = false, Name = "Node 3" });
     
             radTreeView1.CheckBoxes = true;
             radTreeView1.DataSource = bindingList;
             radTreeView1.DisplayMember = "Name";
     
             radTreeView1.NodeFormatting += new Telerik.WinControls.UI.TreeNodeFormattingEventHandler(radTreeView1_NodeFormatting);
             radTreeView1.MouseDown += new MouseEventHandler(radTreeView1_MouseDown);
         }
     
         void radTreeView1_MouseDown(object sender, MouseEventArgs e)
         {
             //when node check box is checked, update the TestClass object
             TreeNodeCheckBoxElement checkBox = radTreeView1.ElementTree.GetElementAtPoint(e.Location) as TreeNodeCheckBoxElement;
             if (checkBox != null)
             {
                 TestClass myObject = checkBox.NodeElement.Data.DataBoundItem as TestClass;
                 myObject.IsChecked = !checkBox.Checked;
             }
         }
     
         void radTreeView1_NodeFormatting(object sender, Telerik.WinControls.UI.TreeNodeFormattingEventArgs e)
         {
             TestClass myObject = e.Node.DataBoundItem as TestClass;
             if (myObject != null)
             {
                 //test the TestClass object IsChecked property ans assign it to the node
                 e.Node.Checked = myObject.IsChecked;
             }
         }
     
         private void radButton1_Click(object sender, EventArgs e)
         {
             //update object
             bindingList[0].IsChecked = !bindingList[0].IsChecked;
             //force the control for fire NodeFormatting
             radTreeView1.TreeViewElement.Update(RadTreeViewElement.UpdateActions.Reset);
         }
     
     }
     
     public class TestClass
     {
         public bool IsChecked { get; set; }
         public string Name { get; set; }
     }

    I hope that you find this information helpful. Let me know if I can be of further assistance.

    Kind regards,
    Stefan
    the Telerik team
    RadControls for WinForms Q1'12 release is now live! Check out what's new or download a free trial >>
  3. UI for WinForms is Visual Studio 2017 Ready
Back to Top