I have a RadGridview databound to custom object list. it has only one field which is GridviewComboBoxColumn . If i change a value in combobox it waits for the me to press tab or click somewhere before it adds that row to the grid and show the add next row field. How can do this as soon as the selection is made on the GridViewComboBoxColumn and not necessarily to move away from it?
thanks
Anu
thanks
Anu
14 Answers, 1 is accepted
0
Accepted

Emanuel Varga
Top achievements
Rank 1
answered on 29 Apr 2011, 11:46 AM
Hello anu,
In my point of view this is not very user friendly because if you make a mistake you will have already added that row and in order to modify it you will have to select that row and change that value, but if you want it to behave like this, you can easily handle the selection changed event of the editor, like so:
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga
Telerik WinForms MVP
In my point of view this is not very user friendly because if you make a mistake you will have already added that row and in order to modify it you will have to select that row and change that value, but if you want it to behave like this, you can easily handle the selection changed event of the editor, like so:
using
System;
using
System.Collections.Generic;
using
System.Windows.Forms;
using
Telerik.WinControls.UI;
public
partial
class
Form1 : Form
{
private
RadGridView radGridView1;
public
Form1()
{
InitializeComponent();
this
.Controls.Add(radGridView1 =
new
RadGridView());
radGridView1.Dock = DockStyle.Fill;
radGridView1.AllowAddNewRow =
true
;
radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
radGridView1.CellEditorInitialized +=
new
GridViewCellEventHandler(radGridView1_CellEditorInitialized);
var list =
new
List<Test>
{
new
Test{Id = 1, Name =
"Name1"
},
new
Test{Id = 2, Name =
"Name2"
},
new
Test{Id = 3, Name =
"Name3"
},
};
var dropDownColumn =
new
GridViewComboBoxColumn();
dropDownColumn.DataSource = list;
dropDownColumn.DisplayMember =
"Name"
;
dropDownColumn.ValueMember =
"Id"
;
radGridView1.Columns.Add(dropDownColumn);
}
void
radGridView1_CellEditorInitialized(
object
sender, GridViewCellEventArgs e)
{
if
(e.Row
is
GridViewNewRowInfo)
{
var editor = e.ActiveEditor
as
RadDropDownListEditor;
if
(editor !=
null
)
{
editor.ValueChanged -=
new
EventHandler(editor_ValueChanged);
editor.ValueChanged +=
new
EventHandler(editor_ValueChanged);
}
}
}
void
editor_ValueChanged(
object
sender, EventArgs e)
{
radGridView1.EndEdit();
}
}
public
class
Test
{
public
int
Id {
get
;
set
; }
public
string
Name {
get
;
set
; }
}
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga
Telerik WinForms MVP
0

anu
Top achievements
Rank 1
answered on 29 Apr 2011, 03:31 PM
Hi Emanuel ,
Thanks, that worked great.
I have one more question related to this.
if i click on the dropdown column on the grid (which put the cell in edit mode) and then if click away from the cell without making any selection from the dropdown, it keep on adding empty rows to the grid. I am not sure how to prevent this from happening.
So if i do a mix of some times selected and sometimes just clicked away i see a bunch of empty rows added
my grid look like this
Name1
Name 2
<empty row here because i started the editor but clicked away w/o selecting any name>
Name 3
Name 4
<empty row here because i started the editor but clicked away w/o selecting any name>
<empty row here because i started the editor but clicked away w/o selecting any name>
Name 10
Thanks for your help
Anu
Thanks, that worked great.
I have one more question related to this.
if i click on the dropdown column on the grid (which put the cell in edit mode) and then if click away from the cell without making any selection from the dropdown, it keep on adding empty rows to the grid. I am not sure how to prevent this from happening.
So if i do a mix of some times selected and sometimes just clicked away i see a bunch of empty rows added
my grid look like this
Name1
Name 2
<empty row here because i started the editor but clicked away w/o selecting any name>
Name 3
Name 4
<empty row here because i started the editor but clicked away w/o selecting any name>
<empty row here because i started the editor but clicked away w/o selecting any name>
Name 10
Thanks for your help
Anu
0

Emanuel Varga
Top achievements
Rank 1
answered on 29 Apr 2011, 03:39 PM
Hello again,
You can adapt the ValueChanged event like so:
This way you will cancel the edit operation if selected index == -1 and end the edit operation otherwise.
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga
Telerik WinForms MVP
You can adapt the ValueChanged event like so:
void
editor_ValueChanged(
object
sender, EventArgs e)
{
var editor = radGridView1.ActiveEditor
as
RadDropDownListEditor;
if
(editor !=
null
)
{
var editorElement = editor.EditorElement
as
RadDropDownListEditorElement;
if
(editorElement.SelectedIndex == -1)
{
radGridView1.CancelEdit();
}
else
{
radGridView1.EndEdit();
}
}
}
This way you will cancel the edit operation if selected index == -1 and end the edit operation otherwise.
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga
Telerik WinForms MVP
0

anu
Top achievements
Rank 1
answered on 29 Apr 2011, 03:57 PM
looks like it is not firing editor_ValueChanged event when i do this, may be because i am not actually choosing any value
thanks
thanks
0

anu
Top achievements
Rank 1
answered on 29 Apr 2011, 04:04 PM
it cancelled the empty rows when i did this
private void radGV_UserAddingRow(object sender, GridViewRowCancelEventArgs e)
{
if(e.Rows[0].Cells["Id"].Value==null)
e.Cancel =
true;
}
Thanks
0

Emanuel Varga
Top achievements
Rank 1
answered on 29 Apr 2011, 04:10 PM
Hello again,
Strange because on my version it is not adding the row when you have no selection, although the UserAddingRow will work in this case, i would suggest using the RowValidating event for this:
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga
Telerik WinForms MVP
Strange because on my version it is not adding the row when you have no selection, although the UserAddingRow will work in this case, i would suggest using the RowValidating event for this:
void
radGridView1_RowValidating(
object
sender, RowValidatingEventArgs e)
{
if
(e.Row
is
GridViewNewRowInfo)
{
if
(e.Row.Cells[0].Value ==
null
)
{
e.Cancel =
true
;
radGridView1.CancelEdit();
}
}
}
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga
Telerik WinForms MVP
0

anu
Top achievements
Rank 1
answered on 29 Apr 2011, 04:49 PM
may be 'cause i haven't upgraded to latest,i am still using Q3 2010-
anyways, i made the change you suggested
Thanks a lot for your help
Anu
anyways, i made the change you suggested
Thanks a lot for your help
Anu
0

Emanuel Varga
Top achievements
Rank 1
answered on 29 Apr 2011, 04:51 PM
Hello again,
Glad to be able to help,
If you have any more questions please just let me know,
Best Regards,
Emanuel Varga
WinForms MVP
Glad to be able to help,
If you have any more questions please just let me know,
Best Regards,
Emanuel Varga
WinForms MVP
0

anu
Top achievements
Rank 1
answered on 29 Apr 2011, 06:18 PM
Hi Emanuel ,
I just have one more question.
I am binding a gridview to an object heirarchy data(as shown in code)- users and their assigned branches.
When i open the first user it shows his branches correctly, but when i open the second one the first one's branch list is cleared and it shows the second one correctly. So i can either never open more than one and show them correctly. I am sure it might be something one the data binding but can't figure out, can you please help
I just have one more question.
I am binding a gridview to an object heirarchy data(as shown in code)- users and their assigned branches.
When i open the first user it shows his branches correctly, but when i open the second one the first one's branch list is cleared and it shows the second one correctly. So i can either never open more than one and show them correctly. I am sure it might be something one the data binding but can't figure out, can you please help
private void loadradGV_UserAdmin()
{
try
{
GridViewTemplate partsTemplate = new GridViewTemplate();
if (!_radGV_UserAdminColumnsCreated)
{
_radGV_UserAdminColumnsCreated = true;
//manually add columns
radGV_UserAdmin.MasterTemplate.AutoGenerateColumns = false;
radGV_UserAdmin.AllowEditRow = false;
radGV_UserAdmin.EnableFiltering = true;
radGV_UserAdmin.AllowDeleteRow = false;
radGV_UserAdmin.AllowAddNewRow = false;
radGV_UserAdmin.GridBehavior = new CustomGridBehavior();//to enable copy paste from readonly columns
radGV_UserAdmin.AllowCellContextMenu = false;
GridViewTextBoxColumn colUserId = new GridViewTextBoxColumn("UserId");
colUserId .Width = 0;
colUserId .IsVisible = false;
colUserId .HeaderText = "UserId";
colUserId .ReadOnly = true;
radGV_UserAdmin.MasterTemplate.Columns.Add(colUserId );
GridViewTextBoxColumn colFullName = new GridViewTextBoxColumn("Name");
colFullName.Width = 200;
colFullName.HeaderText = "User";
radGV_UserAdmin.MasterTemplate.Columns.Add(colFullName);
this.radGV_UserAdmin.GroupSummaryEvaluate += new GroupSummaryEvaluateEventHandler(radGV_userAdmin_GroupSummaryEvaluate);
}
//for child display
this.radGV_UserAdmin.MasterTemplate.Templates.Add(partsTemplate);
partsTemplate.AllowEditRow = false;
GridViewTextBoxColumn colUserId = new GridViewTextBoxColumn("UserId");
colUserId.Width = 0;
colUserId.IsVisible = false;
colUserId.HeaderText = "UserId";
partsTemplate.Columns.Add(colUserId);
GridViewComboBoxColumn colBranch = new GridViewComboBoxColumn("BrId");
colBranch.Width = 300;
colBranch.DropDownStyle = RadDropDownStyle.DropDown;
colBranch.HeaderText = "Authorized Branch";
colBranch.DataSource = GetallbranchList();
colBranch.ValueMember = "BrId";
colBranch.DisplayMember = "BrName";
colBranch.FieldName = "BrId";
partsTemplate.Columns.Add(colBranch);
GridViewRelation relation = new GridViewRelation(this.radGV_UserAdmin.MasterTemplate);
relation.ChildTemplate = partsTemplate;
relation.RelationName = "Branches_Parts";
relation.ParentColumnNames.Add("UserId");
relation.ChildColumnNames.Add("UserId");
radGV_UserAdmin.Relations.Add(relation);
List<
UserAdmin
> userAdminList = _userAdminBL.GetUserAdminList(getFilter());
radGV_UserAdmin.DataSource = userAdminList;
partsTemplate.DataSource = userAdminList;
partsTemplate.DataMember = "AssignedBranches";
radGV_UserAdmin.BestFitColumns();
}
catch (Exception ex)
{
ErrorHandler.HandleError(ex, System.Reflection.MethodBase.GetCurrentMethod().Name);
}
finally
{
}
}
0

Emanuel Varga
Top achievements
Rank 1
answered on 29 Apr 2011, 06:24 PM
Hello again,
Without having your database i cannot test this, could you please create a small sample and post the entire code here so that i can help you?
Best Regards,
Emanuel Varga
Telerik WinForms MVP
Without having your database i cannot test this, could you please create a small sample and post the entire code here so that i can help you?
Best Regards,
Emanuel Varga
Telerik WinForms MVP
0

anu
Top achievements
Rank 1
answered on 29 Apr 2011, 09:16 PM
if i click user 1 it show 4 branches
then when i click the user2 it shows 4 branches for user 2 but the user1 data is cleared.
form1.cs code: (sample with data),
then when i click the user2 it shows 4 branches for user 2 but the user1 data is cleared.
form1.cs code: (sample with data),
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls.UI;
using Telerik.WinControls;
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private bool _radGV_UserAdminColumnsCreated = false;
private void loadradGV_UserAdmin()
{
try
{
GridViewTemplate partsTemplate = new GridViewTemplate();
if (!_radGV_UserAdminColumnsCreated)
{
_radGV_UserAdminColumnsCreated = true;
//manually add columns
radGV_UserAdmin.MasterTemplate.AutoGenerateColumns = false;
radGV_UserAdmin.AllowEditRow = false;
radGV_UserAdmin.EnableFiltering = true;
radGV_UserAdmin.AllowDeleteRow = false;
radGV_UserAdmin.AllowAddNewRow = false;
//radGV_UserAdmin.GridBehavior = new CustomGridBehavior();//to enable copy paste from readonly columns
radGV_UserAdmin.AllowCellContextMenu = false;
GridViewTextBoxColumn colUserId = new GridViewTextBoxColumn("UserId");
colUserId.Width = 0;
colUserId.IsVisible = false;
colUserId.HeaderText = "UserId";
colUserId.ReadOnly = true;
radGV_UserAdmin.MasterTemplate.Columns.Add(colUserId);
GridViewTextBoxColumn colFullName = new GridViewTextBoxColumn("FullName");
colFullName.Width = 200;
colFullName.HeaderText = "User";
radGV_UserAdmin.MasterTemplate.Columns.Add(colFullName);
}
//for child display
this.radGV_UserAdmin.MasterTemplate.Templates.Add(partsTemplate);
partsTemplate.AllowEditRow = false;
GridViewTextBoxColumn colUserIdc = new GridViewTextBoxColumn("UserId");
colUserIdc.Width = 0;
colUserIdc.IsVisible = false;
colUserIdc.HeaderText = "UserId";
partsTemplate.Columns.Add(colUserIdc);
GridViewComboBoxColumn colBranch = new GridViewComboBoxColumn("BusinessId");
colBranch.Width = 300;
colBranch.DropDownStyle = RadDropDownStyle.DropDownList;
colBranch.HeaderText = "Authorized Branch";
colBranch.DataSource = GetallbranchList();
colBranch.ValueMember = "BrId";
colBranch.DisplayMember = "BrName";
colBranch.FieldName = "BusinessId";
partsTemplate.Columns.Add(colBranch);
GridViewRelation relation = new GridViewRelation(this.radGV_UserAdmin.MasterTemplate);
relation.ChildTemplate = partsTemplate;
relation.RelationName = "Branches_Parts";
relation.ParentColumnNames.Add("UserId");
relation.ChildColumnNames.Add("UserId");
radGV_UserAdmin.Relations.Add(relation);
List<
UserAdmin
> userAdminList = GetUserList();
radGV_UserAdmin.DataSource = userAdminList;
partsTemplate.DataSource = userAdminList;
partsTemplate.DataMember = "AssignedBranches";
radGV_UserAdmin.BestFitColumns();
}
catch (Exception ex)
{
}
finally
{
}
}
List<
Branch
> GetallbranchList()
{
List<
Branch
> lst = new List<
Branch
>();
Branch br= new Branch();
int max = 20;
for (int i = 1; i <= max; i++)
{
br = new Branch();
br.BrId = i;
br.BrName = "br"+i.ToString();
lst.Add(br);
}
return lst;
}
List<
UserAdmin
> GetUserList()
{
List<
UserAdmin
> lst = new List<
UserAdmin
>();
List<
UserAssignedBranch
> Brlst = new List<
UserAssignedBranch
>();
UserAdmin usr = new UserAdmin();
UserAssignedBranch brAs = null;
int set = 3;
for (int i = 1; i <= 10; i++)
{
usr = new UserAdmin();
usr.UserId = i;
usr.FullName = "UsrName:" + i.ToString();
Brlst = new List<
UserAssignedBranch
>();
if(i==1)
for (int j=10;j>=7;j--)
{
brAs = new UserAssignedBranch();
brAs.BusinessId = j;
brAs.UserId = i;
Brlst.Add(brAs);
}
if (i == 2)
{
Brlst = new List<
UserAssignedBranch
>();
for (int j = 8; j >= 5; j--)
{
brAs = new UserAssignedBranch();
brAs.UserId = i;
brAs.BusinessId = j;
Brlst.Add(brAs);
}
}
if (i == 3)
{
Brlst = new List<
UserAssignedBranch
>();
for (int j = 4; j >= 1; j--)
{
brAs = new UserAssignedBranch();
brAs.UserId = i;
brAs.BusinessId = j;
Brlst.Add(brAs);
}
}
usr.AssignedBranches = Brlst;
lst.Add(usr);
}
return lst;
}
private void Form1_Load(object sender, EventArgs e)
{
loadradGV_UserAdmin();
}
}
public class Branch{
public int BrId {get;set;}
public string BrName{get;set;}
}
public class UserAdmin
{
public int? UserId {get;set;}
public string FullName {get;set;}
private List<
UserAssignedBranch
> _AssignedBranches;
public List<
UserAssignedBranch
> AssignedBranches{get;set;}
}
public class UserAssignedBranch
{
public int? UserId {get;set;}
public int? BusinessId { get; set; }
}
}
0
Hello Anu,
I hope this helps. Kind regards,
Svett
the Telerik team
In your case, you should use object-relation hierarchy. You can read more about that in the online documentation. Also, you can use the following code snippet:
private
void
loadradGV_UserAdmin()
{
try
{
List<UserAdmin> userAdminList = GetUserList();
radGV_UserAdmin.AutoGenerateHierarchy =
true
;
radGV_UserAdmin.AutoGenerateColumns =
false
;
radGV_UserAdmin.DataSource = userAdminList;
GridViewTemplate partsTemplate = radGV_UserAdmin.MasterTemplate.Templates[0];
partsTemplate.Columns.Clear();
if
(!_radGV_UserAdminColumnsCreated)
{
_radGV_UserAdminColumnsCreated =
true
;
//manually add columns
radGV_UserAdmin.MasterTemplate.AutoGenerateColumns =
false
;
radGV_UserAdmin.AllowEditRow =
false
;
radGV_UserAdmin.EnableFiltering =
true
;
radGV_UserAdmin.AllowDeleteRow =
false
;
radGV_UserAdmin.AllowAddNewRow =
false
;
//radGV_UserAdmin.GridBehavior = new CustomGridBehavior();//to enable copy paste from readonly columns
radGV_UserAdmin.AllowCellContextMenu =
false
;
GridViewTextBoxColumn colUserId =
new
GridViewTextBoxColumn(
"UserId"
);
colUserId.Width = 0;
colUserId.IsVisible =
false
;
colUserId.HeaderText =
"UserId"
;
colUserId.ReadOnly =
true
;
radGV_UserAdmin.MasterTemplate.Columns.Add(colUserId);
GridViewTextBoxColumn colFullName =
new
GridViewTextBoxColumn(
"FullName"
);
colFullName.Width = 200;
colFullName.HeaderText =
"User"
;
radGV_UserAdmin.MasterTemplate.Columns.Add(colFullName);
}
//for child display
partsTemplate.AllowEditRow =
false
;
GridViewComboBoxColumn colBranch =
new
GridViewComboBoxColumn(
"BusinessId"
);
colBranch.Width = 300;
colBranch.DropDownStyle = RadDropDownStyle.DropDownList;
colBranch.HeaderText =
"Authorized Branch"
;
colBranch.DataSource = GetallbranchList();
colBranch.ValueMember =
"BrId"
;
colBranch.DisplayMember =
"BrName"
;
colBranch.FieldName =
"BusinessId"
;
partsTemplate.Columns.Add(colBranch);
radGV_UserAdmin.BestFitColumns();
}
catch
(Exception ex)
{
}
finally
{
}
}
I hope this helps. Kind regards,
Svett
the Telerik team
0

anu
Top achievements
Rank 1
answered on 09 May 2011, 11:11 PM
Hi Svett,
it worked; thanks for your help.
I have one other question, is it possible to add custom text to the add new box on the second level (Heirarchylevel2) like "Add new row" and also a button next to it to click and fire an event to save the change?(like the attachment)
Thanks
it worked; thanks for your help.
I have one other question, is it possible to add custom text to the add new box on the second level (Heirarchylevel2) like "Add new row" and also a button next to it to click and fire an event to save the change?(like the attachment)
Thanks
0
Hi Anu,
You need to create a custom row/cell element. You can read more about customizing cells in this documentation article.
Regards,
Svett
the Telerik team
You need to create a custom row/cell element. You can read more about customizing cells in this documentation article.
Regards,
Svett
the Telerik team