以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  录入多行重复材料资料,如何出现警告  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=88054)

--  作者:szsmall
--  发布时间: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
--  发布时间:2016/7/26 8:41:00
--  
测试没有问题。1楼截图有重复吗


--  作者:szsmall
--  发布时间:2016/7/26 11:03:00
--  
同样的内容,加进去,没出现弹窗警告啊

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


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


--  作者:大红袍
--  发布时间: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
--  发布时间:2016/7/27 18:32:00
--  
大红袍版主,你的代码好像是针对找不到相同项(Is Nothing),我们主要想是找到相同项(材料表已经存在这项价格)

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



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

--  作者:大红袍
--  发布时间: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
--  发布时间:2016/7/31 12:44:00
--  

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

 

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

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

 

 

 


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


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


--  作者:大红袍
--  发布时间:2016/7/31 15:37:00
--  

 

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