c# - How do you get a value from a TextField in DataGridView while the field is being updated -
i have datagridview
text in there (i.e. datagridviewtextboxcolumn
), , every time text changes in 1 of these fields, update method has called somewhere else. however, noticed when updating textbox, value
in cell
not updated yet.
class myform : form { private system.windows.forms.datagridview m_datagridview; private system.windows.forms.datagridviewtextboxcolumn m_textboxcolumn; private void m_datagridview_editingcontrolshowing(object sender, datagridvieweditingcontrolshowingeventargs editevent) { if (editevent.control textbox != null) { textbox textbox = editevent.control textbox; textbox.textchanged -= new eventhandler(textbox_textchanged); textbox.textchanged += new eventhandler(textbox_textchanged); } } private void textbox_textchanged(object sender, eventargs e) { updatetext(); } private void updatetext() { foreach (datagridviewrow row in m_datagridview.rows) { if (row.cells[1].value != null) { string text = row.cells[1].value.tostring(); system.diagnostics.debug.writeline(text); } } } }
so give example: if text in textbox "f"
, , type "oo"
, expect console output:
"f" "fo" "foo"
instead, writes is:
"f" "f" "f"
is there way access contents of textboxes within in updatetext()
method while textboxes being edited?
the datagridviewcell.value
won't updated right while type in editing control
. it's design. value
updated after it's validated
when currentcell
not in edit mode. think want this:
private void textbox_textchanged(object sender, eventargs e) { updatetext(sender control); } private void updatetext(control editingcontrol) { system.diagnostics.debug.writeline(editingcontrol.text); }
update
i think can try thing this:
string editingtext; int editingrowindex = -1; private void textbox_textchanged(object sender, eventargs e) { editingrowindex = ((datagridviewtextboxeditingcontrol)sender).editingcontrolrowindex; editingtext = (sender control).text; updatetext(); } private void updatetext() { foreach (datagridviewrow row in m_datagridview.rows) { if (row.cells[1].value != null) { string text = row.index == editingrowindex ? editingtext : row.cells[1].value.tostring(); system.diagnostics.debug.writeline(text); } } }
Comments
Post a Comment