deng bruce
Top achievements
Rank 1
deng bruce
asked on 07 Sep 2011, 08:28 AM
thanks
3 Answers, 1 is accepted
0
Emanuel Varga
Top achievements
Rank 1
answered on 08 Sep 2011, 08:10 AM
Hello deng bruce,
I will propose the following solution:
If you need still need any any help on this one, please let me know.
btw: there are some helper methods missing here, if you need them please just say so :)
Best Regards,
Emanuel Varga
I will propose the following solution:
public partial class Form1 : Form{ private RadGridView radGridView1 = GridViewHelper.CreateGridView(); private Locker<GridViewDataRowInfo> rowLocker; public Form1() { InitializeComponent(); this.Controls.Add(radGridView1); radGridView1.DataSource = DataSources.GetListDataSource(); var btnLock = new RadButton(); btnLock.Text = "Lock"; this.Controls.Add(btnLock); btnLock.Dock = DockStyle.Bottom; btnLock.Click += new EventHandler(btnLock_Click); var btnUnlock = new RadButton(); btnUnlock.Text = "Unlock"; this.Controls.Add(btnUnlock); btnUnlock.Dock = DockStyle.Bottom; btnUnlock.Click += new EventHandler(btnUnlock_Click); radGridView1.CurrentRowChanging += new CurrentRowChangingEventHandler(radGridView1_CurrentRowChanging); } void radGridView1_CurrentRowChanging(object sender, CurrentRowChangingEventArgs e) { if (rowLocker != null && rowLocker.IsLocked) { e.Cancel = true; } } void btnUnlock_Click(object sender, EventArgs e) { if (rowLocker != null) { rowLocker.Dispose(); //or rowLocker.UnLock(); } } void btnLock_Click(object sender, EventArgs e) { if (radGridView1.CurrentRow == null) { return; } var dataRow = radGridView1.CurrentRow as GridViewDataRowInfo; if (dataRow != null) { if (rowLocker == null) { rowLocker = new Locker<GridViewDataRowInfo>(); } rowLocker.Lock((GridViewDataRowInfo)radGridView1.CurrentRow); } } private class Locker<T> : IDisposable where T : class { public bool IsLocked { get; private set; } public T LockedObject { get; set; } public Locker() { } public Locker(bool isLocked, T lockedObject) { IsLocked = isLocked; LockedObject = lockedObject; } public void Lock(T lockedObject) { IsLocked = true; LockedObject = lockedObject; } public void UnLock() { IsLocked = false; LockedObject = null; } public void Dispose() { UnLock(); } }}If you need still need any any help on this one, please let me know.
btw: there are some helper methods missing here, if you need them please just say so :)
Best Regards,
Emanuel Varga
0
deng bruce
Top achievements
Rank 1
answered on 08 Sep 2011, 08:20 AM
thanks a lot.
0
Hi Deng Bruce,
Thank you for writing.
You can use Emanuel's solution which is the more elegant way to go about this or you can simply always cancel the CurrentRowChanging event and when changing the row, to unsubscribe, change the row and the subscribe again. See the code snippet below:
And when selecting different row:
I hope this helps.
Best wishes,
Ivan Petrov
the Telerik team
Thank you for writing.
You can use Emanuel's solution which is the more elegant way to go about this or you can simply always cancel the CurrentRowChanging event and when changing the row, to unsubscribe, change the row and the subscribe again. See the code snippet below:
private void radGridView1_CurrentRowChanging(object sender, CurrentRowChangingEventArgs e){ e.Cancel = true;}And when selecting different row:
this.radGridView1.CurrentRowChanging -= radGridView1_CurrentRowChanging;this.radGridView1.Rows[index].IsCurrent = true;this.radGridView1.CurrentRowChanging += radGridView1_CurrentRowChanging;I hope this helps.
Best wishes,
Ivan Petrov
the Telerik team
Thank you for being the most amazing .NET community! Your unfailing support is what helps us charge forward! We'd appreciate your vote for Telerik in this year's DevProConnections Awards. We are competing in mind-blowing 20 categories and every vote counts! VOTE for Telerik NOW >>