Foxtable(狐表)用户栏目专家坐堂 → 录入多行重复材料资料,如何出现警告


  共有2559人关注过本帖树形打印复制链接

主题:录入多行重复材料资料,如何出现警告

帅哥哟,离线,有人找我吗?
szsmall
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
录入多行重复材料资料,如何出现警告  发帖心情 Post By:2016/7/26 7:55:00 [只看该作者]

录入相同“供应商"、"产品名称"、"型号规格",弹窗警告和单元格底色变红色
按帮助在录入窗口的临时表,DataColChanged,设置以下代码,没反应

Select Case e.DataCol.name
    Case "产品名称","型号规格"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("产品名称") = False AndAlso dr.IsNull("型号规格") = False Then
            If e.DataTable.Compute("Count([_Identify])","产品名称 = '" & dr("产品名称") & "' And 型号规格 = '" & dr("型号规格") & "'") > 1 Then
                MessageBox.Show("已经存在相同型号和规格的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
            End If
        End If
End Select


图片点击可在新窗口打开查看此主题相关图片如下:材料录入1.jpg
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:cai3.table

 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/7/26 8:41:00 [只看该作者]

测试没有问题。1楼截图有重复吗


 回到顶部
帅哥哟,离线,有人找我吗?
szsmall
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2016/7/26 11:03:00 [只看该作者]

同样的内容,加进去,没出现弹窗警告啊

希望能弹窗警告和单元格底色变红色
如果保存,用新单价取代旧单价


图片点击可在新窗口打开查看此主题相关图片如下:01.gif
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/26 11:35:00 [只看该作者]

If e.Form.Controls("ComboBox1").Value = Nothing Then
    MessageBox.Show("请选择供应商")
    Return
End If

For Each r As Row In Tables("临时材料表").rows
    For Each c As Col In Tables("临时材料表").cols
        If r.IsNull(c.name) Then
            MessageBox.Show(r.index+1 & "行 " & c.name & " 列为空")
            Return
        End If
    Next
Next

Dim Cols1() As  String = {"产品名称","型号规格","单位","单价"}
Dim Cols2() As  String = {"产品名称","型号规格","单位","单价"}
Dim idxs As String = "-1,"
For Each dr1 As DataRow In DataTables("临时材料表").Select("")
    Dim dr2 As DataRow = DataTables("材料表").find("供应商 = '" & e.Form.Controls("ComboBox1").text & "' and 产品名称 = '" & dr1("产品名称") & "' and 型号规格 = '" & dr1("型号规格") & "'")
    If dr2 Is Nothing Then
        dr2 = DataTables("材料表").AddNew()
        dr2("供应商")=e.Form.Controls("ComboBox1").text
        For i As Integer = 0 To Cols1.Length-1
            dr2(Cols2(i))=dr1(Cols1(i))
        Next
        idxs &= dr1("_Identify") & ","
    End If
Next
DataTables("临时材料表").DeleteFor("_Identify in (" & idxs.trim(",") & ")")


 回到顶部
帅哥哟,离线,有人找我吗?
szsmall
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2016/7/27 18:32:00 [只看该作者]

大红袍版主,你的代码好像是针对找不到相同项(Is Nothing),我们主要想是找到相同项(材料表已经存在这项价格)

希望的是下面的效果
1、复制过来,如果材料表已有相同材料的价格,显示红色
2、保存时,弹窗警告
3、确定保存,新价格取代旧价格



图片点击可在新窗口打开查看此主题相关图片如下:01.gif
图片点击可在新窗口打开查看
[此贴子已经被作者于2016/7/27 18:46:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/27 20:06:00 [只看该作者]

If e.Form.Controls("ComboBox1").Value = Nothing Then
    MessageBox.Show("请选择供应商")
    Return
End If
Dim t As Table = e.Form.controls("table1").Table
For Each r As Row In t.rows
    For Each c As Col In t.cols
        If r.IsNull(c.name) Then
            MessageBox.Show(r.index+1 & "行 " & c.name & " 列为空")
            Return
        End If
    Next
Next

Dim Cols1() As  String = {"产品名称","型号规格","单位","单价"}
Dim Cols2() As  String = {"产品名称","型号规格","单位","单价"}
Dim idxs As String = "-1,"
Dim ls_add As new List(Of Row)
Dim dic As new Dictionary(of Row, DataRow)
For i As Integer = 0 To t.Rows.count-1
    Dim dr1 As Row = t.Rows(i)
    Dim dr2 As DataRow = DataTables("材料表").find("供应商 = '" & e.Form.Controls("ComboBox1").text & "' and 产品名称 = '" & dr1("产品名称") & "' and 型号规格 = '" & dr1("型号规格") & "'")
   
    If dr2 Is Nothing Then
        ls_add.add(dr1)
    Else
        dic.Add(dr1, dr2)
    End If
Next
If dic.count > 0 Then
    Dim cs1 As C1.Win.C1FlexGrid.CellStyle = t.Grid.Styles.Add("样式1")
    cs1.backcolor = Color.red
    cs1.Forecolor = Color.white
    For Each key As Row In dic.Keys
        t.Grid.SetCellStyle(key.Index+1, 4, cs1)
    Next
    Dim Result As DialogResult
    Result = MessageBox.Show("是否替换", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    If Result = DialogResult.Yes Then
       
        For Each key As Row In dic.Keys
            Dim dr2 = dic(key)
            dr2("供应商")=e.Form.Controls("ComboBox1").text
            For i As Integer = 0 To Cols1.Length-1
                dr2(Cols2(i))=key(Cols1(i))
            Next
            Dim c = t.Grid.GetCellRange(key.Index+1, 4)
            c.Style = Nothing
        Next
       
        For Each r As Row In ls_add
            Dim dr2 = DataTables("材料表").AddNew()
            dr2("供应商")=e.Form.Controls("ComboBox1").text
            For i As Integer = 0 To Cols1.Length-1
                dr2(Cols2(i))=r(Cols1(i))
            Next
        Next
    End If
    t.DataTable.DataRows.Clear
Else
    For Each r As Row In ls_add
        Dim dr2 = DataTables("材料表").AddNew()
        dr2("供应商")=e.Form.Controls("ComboBox1").text
        For i As Integer = 0 To Cols1.Length-1
            dr2(Cols2(i))=r(Cols1(i))
        Next
    Next
    t.DataTable.DataRows.Clear
End If


 回到顶部
帅哥哟,离线,有人找我吗?
szsmall
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:168 积分:1956 威望:0 精华:0 注册:2015/5/8 1:17:00
  发帖心情 Post By:2016/7/31 12:44:00 [只看该作者]

版主太给力,代码虽然有些看不懂,但基本满足要求。

 

现在有没办法一复制到临时表时,就能标注出来。因为有时手快,点保存,还没看提示,直接确定了,反应过来,价格已经改了。

想参考版主的代码,在DataColChanged的实现,但总出现错误

 

 

 


图片点击可在新窗口打开查看此主题相关图片如下:12.gif
图片点击可在新窗口打开查看


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:cai4.table


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/31 15:37:00 [只看该作者]

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:cai4.table


 回到顶部