Datagridview选项卡顺序



我想在datagridview中设置标签顺序,就像这样。

product name | unit price  | qty | amount 

我希望当我选择product时,qty cell应该被选中。一旦我输入数量并按tab键,那么它应该会转到下一行。

这是我到目前为止所尝试的

private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Tab)
{
dataGridView1.CurrentCell = GetNextCell(dataGridView1.CurrentCell);
e.Handled = true;
}
}
private DataGridViewCell GetNextCell(DataGridViewCell currentCell)
{
int i = 0;
DataGridViewCell nextCell = currentCell;
do
{
int nextCellIndex = (nextCell.ColumnIndex + 1) % dataGridView1.ColumnCount;
int nextRowIndex = nextCellIndex == 0 ? (nextCell.RowIndex + 1) % dataGridView1.RowCount 
: nextCell.RowIndex;
nextCell = dataGridView1.Rows[nextRowIndex].Cells[nextCellIndex];
i++;
} while (i < dataGridView1.RowCount * dataGridView1.ColumnCount && nextCell.ReadOnly);
return nextCell;
}

很难理解你的需求是什么。所以,我猜这可能是你正在寻找的。

如果目标是只允许用户在"quantity"单元格中输入值,并强制网格选择始终是"quantity"列中的一个单元格,那么看起来您可能会使它变得更加复杂。

你评论……

"我希望在我选择product的那一刻,qty cell应该被选中。"

您没有具体说明您是指行中的任何其他单元格还是仅指"Product"单元格。我假定你指的是任何细胞。如果是这种情况,那么我建议您连接网格CellMouseUp事件并简单地将"Quantity"单元格设置为所选单元格。类似…

private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) {
if (e.RowIndex >= 0)
dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells["Quantity"];
}

关于在网格中移动,看起来您的Tab键以过于复杂的方式工作,这可以简化。我的问题是,如果用户按向右或向左方向键会怎样?当前代码没有检查这一点,用户可以将网格选定的单元格移动到另一个不是"数量"列的单元格。我猜你可能也想检查一下这些钥匙。

下面的代码也将满足第二个要求…

"一旦我输入数量并按tab键,那么它应该会转到下一行。">

下面是网格KeyUp事件与移动Tab键的简化版本,除了添加一个检查的右和左箭头键。

private void dataGridView1_KeyUp(object sender, KeyEventArgs e) {
DataGridViewRow curRow = dataGridView1.CurrentRow;
if (e.KeyCode == Keys.Tab) {
if (curRow.Index == dataGridView1.Rows.Count - 1) {
dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells["Quantity"];
}
else {
dataGridView1.CurrentCell = dataGridView1.Rows[curRow.Index + 1].Cells["Quantity"];
}
}
if (e.KeyCode == Keys.Right || e.KeyCode == Keys.Left) {
dataGridView1.CurrentCell = dataGridView1.Rows[curRow.Index].Cells["Quantity"];
}
}

按OP注释编辑…

同样,您需要"edit"你的问题,并明确了当用户按Tab键时你想要的行为。从你的评论中,我只能猜测下面是你在寻找什么。

private void dataGridView1_KeyUp(object sender, KeyEventArgs e) {
DataGridViewCell curCell = dataGridView1.CurrentCell;
DataGridViewRow curRow = dataGridView1.CurrentRow;
switch (e.KeyCode) {
case Keys.Tab:
if (dataGridView1.Columns[curCell.ColumnIndex].Name == "Amount") {
if (curRow.Index == dataGridView1.Rows.Count - 1) {
dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells["ProductName"];
}
else {
dataGridView1.CurrentCell = dataGridView1.Rows[curRow.Index + 1].Cells["ProductName"];
}
}
else {
if (dataGridView1.Columns[curCell.ColumnIndex].Name == "UnitPrice") {
dataGridView1.CurrentCell = dataGridView1.Rows[curRow.Index].Cells["Quantity"];
}
}
break;
}
}

相关内容

  • 没有找到相关文章

最新更新