DataGridView数据输入处理 急!!

violet_han 2012-06-04 05:00:13
背景描述:WPF项目引入WinForm中的DataGridView控件,该控件共有5列(LCM码、B/L码、Cell码、ZBD、时间),前3列每个单元格输入的数据都要验证,例如Cell码列,要验证其长度(动态验证标准)、字符含义(动态验证标准),ZBD列值自动输入,其值为Cell码列同行单元格内输入数据的某段字符,时间列为单元格获取焦点时的系统时间。
问题描述:实现了数据验证及时间列自动输入,但是ZBD列自动输入为实现,其实现代码如下,在调试时,发现Cell码列值输入结束通过验证后ZBD列单元格获取焦点后Cell码列刚输入的值没有了,且提示“索引超出范围”,还请各位提供解决方法啊
private void dgPrint_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 3)
{
string jz;
if (cmbJzCode.SelectedIndex != -1)
{
jz = cmbJzCode.Text;
int rowIndex = e.RowIndex;
conn.Open();
string sql = "select ZBDFr,ZBDSt,ZBDLen from table_Jz where code='" + jz + "'";
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataTable dt = new DataTable();
da.Fill(dt);
conn.Close();
string ZBDFr = dt.Rows[0][0].ToString();
string ZBDSt = dt.Rows[0][1].ToString();
string ZBDLen = dt.Rows[0][2].ToString();
if (ZBDFr == "Cell码")
{
if (dgPrint[rowIndex, 2] != null)
{
dgPrint.CurrentCell.Value = dgPrint[rowIndex, 2].Value.ToString().Trim().Substring(Convert.ToInt16(ZBDSt) - 1, Convert.ToInt16(ZBDLen));
}
else System.Windows.MessageBox.Show("Cell码为空,请先输入!", "状态提示");
}
}
else
System.Windows.MessageBox.Show("请先选择Jz信息!", "状态提示");
}
}
...全文
175 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
violet_han 2012-06-07
  • 打赏
  • 举报
回复
问题已经通过其他方式解决了~~达到了一样的效果,应该还是CellValidating和CellEnter之间有冲突吧

有没有人知道如何进行数据在保存到数据库时唯一性约束的异常处理啊
  • 打赏
  • 举报
回复
断点、分析、判断、修改、断点。。。
violet_han 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
问题应该出在dgPrint.CurrentCell.Value这句后面的代码,里面有很多访问下标的,仔细核对一下是否超出了范围,包括 Substring
[/Quote]

调试过了,是dgPrint[rowIndex, 2]超出范围,但是这个指的是当前单元格的前一个单元格,我是在这个单元格输入数据并验证通过后,选择的当前单元格,按理说不应该超出范围的,不知道怎么回事,还请指教
enaking 2012-06-05
  • 打赏
  • 举报
回复
调试一下看看索引是否超出范围
bdmh 2012-06-05
  • 打赏
  • 举报
回复
问题应该出在dgPrint.CurrentCell.Value这句后面的代码,里面有很多访问下标的,仔细核对一下是否超出了范围,包括 Substring

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧