我有一个DataGridView,我从一个模拟键盘的设备上扫描支票。
当键盘预览打开并且我在等待输入时,用户不能输入任何东西,否则它会被我的方法抓取,以读取由支票阅读器输入的内容。所有这些都运行得很好。
扫描之后,我将在datagridview中添加一行,并将其放在末尾。
如何让datagridview在每次添加后滚动到底部?我最终得到了几百张支票,它在最上面。所以,每次他们扫描的时候,他们都不知道扫描了什么。
这是我创建行的方法:
private void Timer1Tick(object sender, EventArgs e)
{
_secondswaited += 1;
if (_secondswaited == SecondsToWait)
{
timer1.Enabled = false;
var psc = new ParseScannedCheckNumbers();
if (psc.ParseCheck(_checkData))
{
label_Status.Text = @"Scan Next Check";
var ct = checkTrans.IndividualCheck.NewIndividualCheckRow();
ct.Date = DateTime.Now.ToShortDateString();
ct.AccountNumber = GetAccountNumber(psc.BankAccountNumber);
ct.Name = GetAccountName(ct.AccountNumber);
ct.AccountBalance = GetAccountBalance(ct.AccountNumber);
//ct.CheckAmount = 0;
ct.BankRoutingNumber = psc.BankRoutingNumber;
ct.BankAccountNumber = psc.BankAccountNumber;
ct.CheckNumber = psc.CheckNumber;
ct.Status = "Entered";
checkTrans.IndividualCheck.Rows.Add(ct);
var dgvcount = dgv_Checks.Rows.Count;
**dgv_Checks.Rows[dgvcount - 1].Selected = true;**
}
else
{
label_Status.Text = @"Scan failed. Rescan check.";
}
_checkData = string.Empty;
_secondswaited = 0;
var rs = new Registry.RegistrySettings();
if (!rs.ScanChecksContinuous)
{
StopScanning();
label_Status.Text = @"Success!";
EditLastRowEntered();
}
label_ChecksScanned.Text = (dgv_Checks.RowCount - 1).ToString();
}
}粗体部分是我试图移动到最后一行的地方,但没有成功。
谢谢!
发布于 2011-04-22 05:48:40
我会使用DataGridView.CurrentCell属性。在您遇到问题的代码行中尝试以下代码:
dgv_Checks.CurrentCell = dgv_Checks.Rows[dgvcount - 1].Cells[0];发布于 2011-04-22 05:53:39
我认为您需要做的是检查Row是否正在显示。然后
将粗体显示的行替换为
if(dgv_Checks.Rows[dgvcount - 1].Displayed == false)
{
dgv_Checks.FirstDisplayedScrollingRowIndex = dgvcount - 1;
}https://stackoverflow.com/questions/5749983
复制相似问题