当前位置: 代码迷 >> VB Dotnet >> 在DataGridView根据录入内容查找并拷贝另一个DataTable的人事数据有关问题
  详细解决方案

在DataGridView根据录入内容查找并拷贝另一个DataTable的人事数据有关问题

热度:148   发布时间:2016-04-25 02:07:56.0
在DataGridView根据录入内容查找并拷贝另一个DataTable的人事数据问题
从数据库表中取得人事数据后,放在DataTable0中,数据如下:
DataTable0--人事数据:
工号  姓名  职务    入职日期
001   张三  总经理  2007-10-02
003   王五  会计师  2009-05-05
004   赵六  出纳员  2010-06-06
005   陈七  业务员  2013-12-05

从数据库中取得请假单数据,放在DataTable1中,并且绑定到表格DataGridView1上
DataGridView1--请假单录入表格:
工号  姓名  职务    请假起始时间      请假截止时间
005   陈七  业务员  2014-11-15 09:00  2014-11-15 17:00
004

我希望在表格DataGridView1中输入新假单时,输入工号004后,
自动到DataTable0中找到相应人事数据(赵六,出纳员)拷贝到请假表格DataGridView1的相应单元格,以提高录入速度,如下表:
工号  姓名  职务    请假起始时间      请假截止时间
005   陈七  业务员  2014-11-15 09:00  2014-11-15 17:00
004   赵六  出纳员

我尝试写的代码如下:
先在DataGridView1.CellValidating中写
If DataGridView1.Columns(e.ColumnIndex).HeaderText = "工号" And Len(DataGridView1.Item("Column2姓名", e.RowIndex).Value.ToString) > 0
    S1 = Trim(DataGridView1(e.ColumnIndex, e.RowIndex).Value.ToString)  '获取当前单元格工号的初始值
End If
然后在DataGridView1.CellValidated中写
If DataGridView1.Columns(e.ColumnIndex).HeaderText = "工号" And Len(DataGridView1.Item("Column2姓名", e.RowIndex).Value.ToString) > 0
    S2 = Trim(DataGridView1(e.ColumnIndex, e.RowIndex).Value.ToString)  '获取当前单元格工号的确认值
    If S1 <> S2 And S2 <>"" Then 
        Dim Row0() As DataRow
        SS = "订单号 = '" & S2 & "'"
        Row0 = DataTable0.Select(SS)
        If Not (Row0 Is Nothing) Then
            DataGridView1.Item("Column2姓名", e.RowIndex).Value = Row0(0)("姓名").ToString
            DataGridView1.Item("Column2职务", e.RowIndex).Value = Row0(0)("职务").ToString
        End If
    End if
End If

为了限制输入已手动填入姓名的请假记录被意外修改,上述两个事件代码都加入了如下条件:
If DataGridView1.Columns(e.ColumnIndex).HeaderText = "工号" And Len(DataGridView1.Item("Column2姓名", e.RowIndex).Value.ToString) > 0
此条件运行时偶发错误提示:未处理NullReferenceException未将对象引用设置到对象的实例...

    请大侠帮我改进一下代码拓展思路。谢谢!
------解决思路----------------------
判断各个索引处的对象是否为null,判断Value是否为null,如果为null那么ToString会报错
------解决思路----------------------
你把不让修改的设置成只读,readonly=true就好了
  相关解决方案