473,414 Members | 1,711 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,414 software developers and data experts.

How do you bypass cells in a "DataGridView"

Does anyone know if it's possible to prevent a user from entering a
particular "DataGridView" cell. I simply want to redirect them into the next
available cell but nothing I try works. Setting the "CurrentCell" property
for instance causes no end of problems. If I call it in a "CellEnter"
handler I get the error "Operation is not valid because it results in a
reentrant call to the SetCurrentCellAddressCore function" (which others on
the web have also reported). If I call it in a "CellMouseDown" handler it
works when right-clicking but not left-clicking. In other handlers it causes
a stack overflow. Does anyone know how to pull this off. Thanks.
Mar 9 '07 #1
4 8417
On Mar 9, 12:13 pm, "Michael Torville" <no_spam@_nospam.comwrote:
Does anyone know if it's possible to prevent a user from entering a
particular "DataGridView" cell. I simply want to redirect them into the next
available cell but nothing I try works. Setting the "CurrentCell" property
for instance causes no end of problems. If I call it in a "CellEnter"
handler I get the error "Operation is not valid because it results in a
reentrant call to the SetCurrentCellAddressCore function" (which others on
the web have also reported). If I call it in a "CellMouseDown" handler it
works when right-clicking but not left-clicking. In other handlers it causes
a stack overflow. Does anyone know how to pull this off. Thanks.
Michael:

I have a few thoughts. First, have you set the DataGridView's
MultiSelect, SelectionMode, or EditMode attributes or left them on
their default settings? If you could show us your code for when you
create your DataGridView and when you set it's attributes that would
help.

I agree that using the CellEnter event is a bad idea since that could
cause an infinite loop. I cannot replicate your problem with left
clicked when using the CellMouseDown event. I have tried using both
the CellMouseDown and the CellMouseClick events and they both register
for left-click and right-click. I'm hoping that once I know how you
have your attributes set I will be able to replicate your problem. If
possible please also supply your code for the CellMouseDown event.

~ Justin Creasy
www.immergetech.com
www.immergecomm.com

Mar 9 '07 #2
Here is some code that postpones setting the current cell using a
timer in CellEnter to prevent cell 2,2 becoming current. There is a
flash when you try clicking, but the arrow keys and tab keys seem to
work better.

private int skipRow = 2;
private int skipCol = 2;
private int oldRow = -2;
private int oldColumn = -2;

void dataGridView1_CellEnter(object sender,
DataGridViewCellEventArgs e)
{
if (e.RowIndex == skipRow && e.ColumnIndex == skipCol)
{
if (Control.MouseButtons == MouseButtons.None)
{
if (oldRow == skipRow - 1 && oldColumn == skipCol)
{
oldRow = skipRow + 1;

}
else if (oldRow == skipRow && oldColumn == skipCol
- 1)
{
oldColumn = skipCol + 1;
}
else if (oldRow == skipRow + 1 && oldColumn ==
skipCol)
{
oldRow = skipRow - 1;

}
else if (oldRow == skipRow && oldColumn == skipCol
+ 1)
{
oldColumn = skipCol - 1;
}
}
Timer t = new Timer();
t.Interval = 5;
t.Tick += new EventHandler(t_Tick);
t.Start();
}
}

void t_Tick(object sender, EventArgs e)
{
Timer t = sender as Timer;
t.Stop();
this.dataGridView1.CurrentCell =
this.dataGridView1[oldColumn, oldRow];
t.Tick -= new EventHandler(t_Tick);
}

void dataGridView1_CellLeave(object sender,
DataGridViewCellEventArgs e)
{
oldRow = e.RowIndex;
oldColumn = e.ColumnIndex;
}
==============
Clay Burch
Syncfusion, Inc.

Mar 10 '07 #3
I have a few thoughts. First, have you set the DataGridView's
MultiSelect, SelectionMode, or EditMode attributes or left them on
their default settings? If you could show us your code for when you
create your DataGridView and when you set it's attributes that would
help.
Thanks for the feedback. I've have in fact set all of the above using the VS
forms designer so it all takes place in "InitializeComponent()"

MultiSelect = false
SelectionMode = CellSelect
EditMode = EditOnKeystrokeOrF2
I agree that using the CellEnter event is a bad idea since that could
cause an infinite loop.
I've taken precautions against this. The error I cited previously however
appears to be a bug not only because I've read about others who have the
same problem, but because the manager of the "DataGridView" class at MSFT
(Mark Rideout) acknowledged it's a bug under other circumstances (on the
MSFT forums site).
I cannot replicate your problem with left
clicked when using the CellMouseDown event. I have tried using both
the CellMouseDown and the CellMouseClick events and they both register
for left-click and right-click. I'm hoping that once I know how you
have your attributes set I will be able to replicate your problem. If
possible please also supply your code for the CellMouseDown event.
Well, I just tried this by creating a new app out-of-the-box. I added a
"DataGridView" as the only control on the form with two textbox columns. I
then created a "CellMouseDown" handler as follows:

private void m_Grid_CellMouseDown(object sender,
DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == 0)
{
m_Grid.CurrentCell = m_Grid[1, 0];
}
}

When the app starts, column 0 is automatically the current column. If I now
right-click column 0 then the handler is called (just once) and column 1
becomes current as expected. If I left-click column 0 however then the
handler is also called (just once) but column 0 remains current. I can
understand why this is probably occurring (left-clicking makes the cell
current *after* the handler exits) but it's incorrect behaviour IMO (since
the handler's code should override the left-mouse click). Any ideas? Thanks.
Mar 12 '07 #4
Thanks. I'll take a look at this but in all honesty, the timer makes me
nervous. I'm not sure why a timer is needed here but I'll reserve judgment
until I review it :) Thanks again.
Mar 12 '07 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: Martin Widmer | last post by:
Hello again! I have a datagridview control on my form and am using VS.Net 2005. One column is set up as combo box column, and when I try to set the datasource for that combobox column at design...
8
by: Pieter | last post by:
Hi, I'm having some weird problem using the BackGroundWorker in an Outlook (2003) Add-In, with VB.NET 2005: I'm using the BackGroundWorker to get the info of some mailitems, and after each item...
3
by: Pieter Coucke | last post by:
Hi, When a user types a non numeric-value in a numeric column in a DataGridView, and he tries to leave the cell, he gets this "Input string was not in a correct format."-exception. Is there a...
0
by: romancoelho | last post by:
Hey everyone, I know this has to be simple, but can't figure out how to do it. How can I display the grid lines in all rows in the gird. The default behavior of the DataGridView seems to be that it...
0
by: lgalumbres | last post by:
Hello, I have a DataGridView control with a DataGridViewComboBoxColumn that allows users to choose selections from a list. The DataGridView is bound to a DataTable object and the...
3
by: Sugandh Jain | last post by:
Hi, I am using property like this.. private DateTime? _propName; public DateTime? PropName { get { return _propName; }
3
by: =?Utf-8?B?UmljaA==?= | last post by:
I need to build a sql string that looks like this: strSql = "Select * from tbl1 Where x In (123,456,789)" or strSql = "Select * from tbl1 Where x In (123,456,789,527,914)" The numbers...
1
by: Aegixx | last post by:
Ok, extremely wierd situation here: (I'll post the code below, after the explanation) I've got a Windows application (.NET 3.5) that has a single Form with a DataGridView embedded. The user...
0
by: Rich P | last post by:
you could establish a formula where you count the number of characters being displayed when the column width is 50 and then how many chars are displayed with the width is 60, 70, ... Then if the...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.