2011-12-13 53 views
4

我使用DataGridView从DataTable获取数据来编辑一些数据量。一切似乎都没问题,但有一些不便之处。当用户开始编辑单元格时,该单元格的文本会自动变为选中状态,光标将移动到单元格文本的末尾。 我想在用户开始编辑单元格文本时以编程方式将光标(插入符号)放到编辑单元格中文本的开头。 我试过了:如何在用户编辑单元格文本时以编程方式编辑DataGridView单元格中的光标到文本的开头?

private void gridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     DataGridViewTextBoxEditingControl dText = (DataGridViewTextBoxEditingControl)e.Control; 
     dText.Select(0, 0); 
    } 

这不行。此外,我试图取消选择CellBeginEdit中的文本 - 也没有结果。

回答

8

我会期待你做了什么工作。但是DataGridView是一个复杂的控件,具有许多事件,并且通常不会直观地工作。看起来,当EditingControlShowing事件发生时,控件还没有被初始化,所以你不能影响它。当事件发生时,控件甚至还没有创建。

应该有,可能是一个更好的方式来做到这一点,但我得到了它的使用CellEnter事件工作:

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    if (dgv.CurrentCell.EditType == typeof(DataGridViewTextBoxEditingControl)) 
    { 
     dgv.BeginEdit(false);    
     ((TextBox)dgv.EditingControl).SelectionStart = 0; 
    } 
} 

所以当进入小区我只是去直接进入编辑模式,但我通过falseBeginEdit(),告诉它不要选择任何文本。现在编辑控件已完全初始化,我可以将SelectionStart设置为零以将光标移动到文本的开头。

如果单元格不是文本框,那么我什么都不做。

如果你愿意,你可以做

dgv.EditMode = DataGridViewEditMode.EditProgrammatically; 

,让你有编辑开始时完全控制,但我觉得这是没有必要的。

+0

我试过这个解决方案,它是工作!谢谢! – Alexander 2011-12-15 14:31:44