Showing posts with label Programming. Show all posts
Showing posts with label Programming. Show all posts

Friday, November 06, 2009

Visual Studio Edit and Continue

EDIT: LOOKS LIKE THIS IS ANOTHER ONE THAT DIDN'T ACTUALLY FIX IT... :-(
PLEASE LET ME KNOW IF YOU HAVE THE SOLUTION


A certain Visual Studio project wouldn't let me edit the code while debugging. It made debugging a real pain. I would get messages like this:

"Changes are not allowed when the debugger has been attached to an already running process or the code being debugged was optimized at build or run time."

There are different reasons why this type of message might come up. But in my case, eventually I discovered that the projects target frameworks didn't match. One project targeted 3.5 and the other targeted 2.0. Once I set both to 3.5, I could debug normally again.

Friday, September 18, 2009

How to make the DataGridViewComboBoxCell actually behave like one

Even though the DataGridViewComboBoxColumn has a property for DisplayStyle which can be set to either DropDownButton or ComboBox (or Nothing), there's virtually no difference that I can see between the two settings. What I want is to be able to type text into the control like a normal ComboBox. I was disappointed to find out that this functionality is not built in. But after some struggle tracking it down (which is why I'm posting this), I did find some information about how you can actually make it work (kind of). These are the key events:


private void dataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
ComboBox cbo = e.Control as ComboBox;
if (cbo != null) {
cbo.DropDownStyle = ComboBoxStyle.DropDown;
cbo.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
cbo.AutoCompleteSource = AutoCompleteSource.ListItems;
cbo.TextChanged -= new EventHandler(cbo_TextChanged);
cbo.TextChanged += new EventHandler(cbo_TextChanged);
}
}



private void dataGridView1_CellValidating(object sender,
DataGridViewCellValidatingEventArgs e)
{
object eFV = e.FormattedValue;
DataGridViewComboBoxCell cbc = dataGridView1.CurrentCell as
DataGridViewComboBoxCell;
if (cbc != null && !cbc.Items.Contains(eFV))
{
cbc.Items.Insert(0, eFV);
}
if (dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

cbc.Value = cbc.Items[0];
}



private void cbo_TextChanged(object sender, EventArgs e)
{
dataGridView1.NotifyCurrentCellDirty( true );
}