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 >>