Foxtable(狐表)用户栏目专家坐堂 → [求助]如何实现多区域选择


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

主题:[求助]如何实现多区域选择

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


加好友 发短信
等级:四尾狐 帖子:815 积分:5616 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/5/24 14:58:00 [只看该作者]

可以了。

Dim hdr As Integer = e.Table.HeaderRows

e.Table.Grid.SetCellStyle(ary(0) + hdr, ary(1)+1, "")
e.Table.Grid.SetCellStyle(ary(0) + hdr, ary(1)+1, s)


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


加好友 发短信
等级:四尾狐 帖子:815 积分:5616 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/5/24 15:23:00 [只看该作者]

还是有问题,我这个项目中,双击列标题会出来一个筛选窗口,用这个筛选窗口筛选过后,就会报这个错误。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.rar


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

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/24 15:35:00 [只看该作者]

If e.newrange.Toprow < 0 Then Return
If vars("stop") = True Then Return
If Vars("dqysxtablename") <> e.Table.Name Then
    Vars("dqysxtablename") = e.Table.Name
    _ps.clear
End If
If ModifierKey <> Keys.Control Then
    For Each p As String In _ps
        Dim ary() As String = p.Split(",")
        If ary(0) >= 0 AndAlso ary(1) >= 0 Then
            e.Table.Grid.SetCellStyle(ary(0)+e.Table.HeaderRows, ary(1)+1, "")
        End If
    Next
    _ps.clear
End If
For i As Integer = e.NewRange.TopRow To e.NewRange.BottomRow
    For j As Integer = e.NewRange.LeftCol To e.NewRange.RightCol
        Dim p As String = i & "," & j
        If i >= 0 AndAlso j >= 0 AndAlso _ps.contains(p) = False Then
            _ps.add(p)
        End If
    Next
Next
Dim sum As Double = 0
Dim hs As Integer = 0
For Each p As String In _ps
    Dim ary() As String = p.Split(",")
    If ary(0) >= 0 AndAlso ary(1) >= 0 AndAlso e.Table.Rows(ary(0), True).IsGroup = False Then
        Dim s As C1.Win.C1FlexGrid.CellStyle = e.Table.grid.Styles.Add("selected")
        's.backcolor = Color.LightSteelBlue '背景
        s.backcolor = Color.LightBLue
        e.Table.Grid.SetCellStyle(ary(0)+e.Table.HeaderRows, ary(1)+1, s)
        'e.Table.DataTable.SysStyles("Focus").BackColor = Color.red
       
        '各种计算
        Dim cval = e.Table(cint(ary(0)), cint(ary(1)))
        sum += val(cval)
        hs = hs + 1
    End If
Next
If hs > 0 Then
    StatusBar.Message1 = "第" & (e.Table.Position + 1) & "行,目前展现" & e.Table.Rows.Count & "行,本表共" & e.Table.DataTable.DataRows.Count & "行." & _
    "|            |计数:" & hs & "  |累计:" & sum & "  |平均:" & sum/hs
Else
    StatusBar.Message1 = "第" & (e.Table.Position + 1) & "行,目前展现" & e.Table.Rows.Count & "行,本表共" & e.Table.DataTable.DataRows.Count & "行."
End If

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


加好友 发短信
等级:四尾狐 帖子:815 积分:5616 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/5/24 15:42:00 [只看该作者]

以下是引用有点色在2017/5/24 15:35:00的发言:
If e.newrange.Toprow < 0 Then Return
If vars("stop") = True Then Return
If Vars("dqysxtablename") <> e.Table.Name Then
    Vars("dqysxtablename") = e.Table.Name
    _ps.clear
End If
If ModifierKey <> Keys.Control Then
    For Each p As String In _ps
        Dim ary() As String = p.Split(",")
        If ary(0) >= 0 AndAlso ary(1) >= 0 Then
            e.Table.Grid.SetCellStyle(ary(0)+e.Table.HeaderRows, ary(1)+1, "")
        End If
    Next
    _ps.clear
End If
For i As Integer = e.NewRange.TopRow To e.NewRange.BottomRow
    For j As Integer = e.NewRange.LeftCol To e.NewRange.RightCol
        Dim p As String = i & "," & j
        If i >= 0 AndAlso j >= 0 AndAlso _ps.contains(p) = False Then
            _ps.add(p)
        End If
    Next
Next
Dim sum As Double = 0
Dim hs As Integer = 0
For Each p As String In _ps
    Dim ary() As String = p.Split(",")
    If ary(0) >= 0 AndAlso ary(1) >= 0 AndAlso e.Table.Rows(ary(0), True).IsGroup = False Then
        Dim s As C1.Win.C1FlexGrid.CellStyle = e.Table.grid.Styles.Add("selected")
        's.backcolor = Color.LightSteelBlue '背景
        s.backcolor = Color.LightBLue
        e.Table.Grid.SetCellStyle(ary(0)+e.Table.HeaderRows, ary(1)+1, s)
        'e.Table.DataTable.SysStyles("Focus").BackColor = Color.red
       
        '各种计算
        Dim cval = e.Table(cint(ary(0)), cint(ary(1)))
        sum += val(cval)
        hs = hs + 1
    End If
Next
If hs > 0 Then
    StatusBar.Message1 = "第" & (e.Table.Position + 1) & "行,目前展现" & e.Table.Rows.Count & "行,本表共" & e.Table.DataTable.DataRows.Count & "行." & _
    "|            |计数:" & hs & "  |累计:" & sum & "  |平均:" & sum/hs
Else
    StatusBar.Message1 = "第" & (e.Table.Position + 1) & "行,目前展现" & e.Table.Rows.Count & "行,本表共" & e.Table.DataTable.DataRows.Count & "行."
End If

这个只是解决了选择两行,三行着色的问题,但我最后的,用我自己的筛选窗口筛选报错的问题,没有解决啊!


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


加好友 发短信
等级:四尾狐 帖子:815 积分:5616 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/5/24 16:00:00 [只看该作者]

我上传的最后一个例子看看吧。用我自己的筛选窗口,这个错误总出现。请协助.

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/24 17:53:00 [只看该作者]

If e.newrange.Toprow < 0 Then Return
If vars("stop") = True Then
    _ps.clear
    Return
End If

If Vars("dqysxtablename") <> e.Table.Name Then
    Vars("dqysxtablename") = e.Table.Name
    _ps.clear
End If
If ModifierKey <> Keys.Control Then
    For Each p As String In _ps
        Dim ary() As String = p.Split(",")
        If ary(0) >= 0 AndAlso ary(1) >= 0 Then
            e.Table.Grid.SetCellStyle(ary(0)+e.Table.HeaderRows, ary(1)+1, "")
        End If
    Next
    _ps.clear
End If
For i As Integer = e.NewRange.TopRow To e.NewRange.BottomRow
    For j As Integer = e.NewRange.LeftCol To e.NewRange.RightCol
        Dim p As String = i & "," & j
        If i >= 0 AndAlso j >= 0 AndAlso _ps.contains(p) = False Then
            _ps.add(p)
        End If
    Next
Next
Dim sum As Double = 0
Dim hs As Integer = 0
For Each p As String In _ps
    Dim ary() As String = p.Split(",")
    If ary(0) >= 0 AndAlso ary(1) >= 0 AndAlso e.Table.Rows(ary(0), True).IsGroup = False Then
        Dim s As C1.Win.C1FlexGrid.CellStyle = e.Table.grid.Styles.Add("selected")
        's.backcolor = Color.LightSteelBlue '背景
        s.backcolor = Color.LightBLue
        e.Table.Grid.SetCellStyle(ary(0)+e.Table.HeaderRows, ary(1)+1, s)
        'e.Table.DataTable.SysStyles("Focus").BackColor = Color.red
       
        '各种计算
        Dim cval = e.Table(cint(ary(0)), cint(ary(1)))
        sum += val(cval)
        hs = hs + 1
    End If
Next
If hs > 0 Then
    StatusBar.Message1 = "第" & (e.Table.Position + 1) & "行,目前展现" & e.Table.Rows.Count & "行,本表共" & e.Table.DataTable.DataRows.Count & "行." & _
    "|            |计数:" & hs & "  |累计:" & sum & "  |平均:" & sum/hs
Else
    StatusBar.Message1 = "第" & (e.Table.Position + 1) & "行,目前展现" & e.Table.Rows.Count & "行,本表共" & e.Table.DataTable.DataRows.Count & "行."
End If

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


加好友 发短信
等级:四尾狐 帖子:815 积分:5616 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/5/25 8:26:00 [只看该作者]

谢谢,现在没提醒错误了,下发下去试试!


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


加好友 发短信
等级:四尾狐 帖子:815 积分:5616 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/5/25 13:46:00 [只看该作者]

部分配置低的电脑,提示溢出怎么办?

.NET Framework 版本:2.0.50727.8000
Foxtable 版本:2017.5.22.1
错误所在事件:全局表事件,AfterSelRangeChange
详细错误信息:
溢出。


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/25 14:20:00 [只看该作者]

 测试没有问题。试试这样

 

If e.newrange.Toprow < 0 Then Return
If vars("stop") = True Then
    _ps.clear
    Return
End If
If Vars("dqysxtablename") <> e.Table.Name Then
    Vars("dqysxtablename") = e.Table.Name
    _ps = new List(Of String)
    gc.Collect
End If
If ModifierKey <> Keys.Control Then
    For Each p As String In _ps
        Dim ary() As String = p.Split(",")
        If ary(0) >= 0 AndAlso ary(1) >= 0 Then
            e.Table.Grid.SetCellStyle(ary(0)+e.Table.HeaderRows, ary(1)+1, "")
        End If
    Next
    _ps = new List(Of String)
    gc.Collect
End If
For i As Integer = e.NewRange.TopRow To e.NewRange.BottomRow
    For j As Integer = e.NewRange.LeftCol To e.NewRange.RightCol
        Dim p As String = i & "," & j
        If i >= 0 AndAlso j >= 0 AndAlso _ps.contains(p) = False Then
            _ps.add(p)
        End If
    Next
Next
Dim sum As Double = 0
Dim hs As Integer = 0
For Each p As String In _ps
    Dim ary() As String = p.Split(",")
    If ary(0) >= 0 AndAlso ary(1) >= 0 AndAlso e.Table.Rows(ary(0), True).IsGroup = False Then
        Dim s As C1.Win.C1FlexGrid.CellStyle = e.Table.grid.Styles.Add("selected")
        's.backcolor = Color.LightSteelBlue '背景
        s.backcolor = Color.LightBLue
        e.Table.Grid.SetCellStyle(ary(0)+e.Table.HeaderRows, ary(1)+1, s)
        'e.Table.DataTable.SysStyles("Focus").BackColor = Color.red
       
        '各种计算
        Dim cval = e.Table(cint(ary(0)), cint(ary(1)))
        sum += val(cval)
        hs = hs + 1
    End If
Next
If hs > 0 Then
    StatusBar.Message1 = "第" & (e.Table.Position + 1) & "行,目前展现" & e.Table.Rows.Count & "行,本表共" & e.Table.DataTable.DataRows.Count & "行." & _
    "|            |计数:" & hs & "  |累计:" & sum & "  |平均:" & sum/hs
Else
    StatusBar.Message1 = "第" & (e.Table.Position + 1) & "行,目前展现" & e.Table.Rows.Count & "行,本表共" & e.Table.DataTable.DataRows.Count & "行."
End If


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


加好友 发短信
等级:四尾狐 帖子:815 积分:5616 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/5/25 14:38:00 [只看该作者]

我试一下,这个溢出,我发现一般是在点选整个表的时候会出现。我先试一下你这个代码。

 回到顶部
总数 54 上一页 1 2 3 4 5 6 下一页