找回密码
 立即注册

QQ登录

只需一步,快速开始

sanyoumed

初级会员

40

主题

132

帖子

322

积分

初级会员

积分
322

活字格认证微信认证勋章

sanyoumed
初级会员   /  发表于:2014-8-14 14:33  /   查看:5892  /  回复:7
Visual studio 2010
Winforms
C1 Flexgrid4.0

以下是大致的代码:


        Dim npodt As DataTable = podt()

        Dim npoprodt As DataTable = poprodt()

        npodt.TableName = "npodt"
        npoprodt.TableName = "npoprodt"

        ds.Tables.Add(npodt.Copy())
        ds.Tables.Add(npoprodt.Copy())


        'ds.Relations.Add("CustomerOrders", ds.Tables("Customers").Columns("ID"),   ds.Tables("Orders").Columns("CustomerID"))
        'ds.Relations.Add("Order Details", ds.Tables("Orders").Columns("ID"), ds.Tables("OrderDetail").Columns("OrderID"))
        'ds.Relations.Add(&quotroduct Details", ds.Tables(&quotroducts").Columns("ID"), ds.Tables("OrderDetail").Columns(&quotroductID"))

        '' bind data set to flex1/flex2 controls
        'flex1.DataMember = "Customers"
        'flex1.DataSource = ds
        'flex2.DataMember = "Customers.CustomerOrders"
        'flex2.DataSource = ds

        ds.Relations.Add("poprodt", ds.Tables("npodt").Columns("单号"), ds.Tables("npoprodt").Columns("单号"))


        'fgOrder.DataSource = podt

        fgOrder.DataMember = "npodt"
        fgOrder.DataSource = ds
        fgOrder.AutoSizeCols()

        fgOrderProduct.DataMember = "npodt.poprodt"
        fgOrderProduct.DataSource = ds

功能描述:       fgOrder 是订单表;fgOrderProduct 是订单产品,当选择fgOrder 不同的订单时,fgOrderProduct 应该显示相应的产品信息,


故障描述:假设有三个订单 A,B,C ,A有1条产品信息,B有3条产品信息,C有5条产品信息,如果最初显示的是B订单,那么fgOrderProduct显示3条产品信息,然后移动至A订单,fgOrderProduct显示1条产品信息;然后再移至B订单,此时fgOrderProduct只能显示1条记录。若移至C,fgOrderProduct也只显示1条产品信息。

烦请答复。谢谢!

7 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-8-14 15:40:00
沙发
回复 1楼sanyoumed的帖子

按照你1楼的代码,进行测试,未重现你说的问题。
测试步骤:
1.拖拽两个FlexGrid到Form。
2.在Form初始化的时候测试如下数据:
  1.       DataTable podt = new DataTable();
  2.             DataTable poprodt = new DataTable();
  3.             podt.TableName = "podt"; ;
  4.             poprodt.TableName = "poprodt";

  5.             podt.Columns.Add("Customer", typeof(string));
  6.             podt.Columns.Add("单号", typeof(string));
  7.             podt.Columns.Add("Date", typeof(DateTime));
  8.             podt.Columns.Add("Amount", typeof(decimal));

  9.             // populate data table
  10.             Random rnd = new Random();
  11.             string[] customers = "GM|Ford|Chrysler|Toyota|Honda|Mazda|Mitsubishi|Mercedes".Split('|');
  12.             object[] data = new object[4];
  13.             for (int i = 0; i < 7; i++)
  14.             {
  15.                 data[0] = customers[rnd.Next(customers.Length - 1)];
  16.                 data[1] = "单号:" + i.ToString();
  17.                 data[2] = DateTime.Now.AddDays(-356 * rnd.Next(-365, 0));
  18.                 data[3] = rnd.NextDouble() * 10000;
  19.                 podt.Rows.Add(data);
  20.             }

  21.             poprodt.Columns.Add("单号", typeof(string));
  22.             poprodt.Columns.Add("Details", typeof(string));
  23.             object[] data2 = new object[2];
  24.             for (int i = 0; i < 20; i++)
  25.             {
  26.                 data2[0] = "单号:"+ rnd.Next(7).ToString();
  27.                 data2[1] = "有关细节"+i.ToString();
  28.                 poprodt.Rows.Add(data2);
  29.             }

  30.             DataSet ds = new DataSet();
  31.             ds.Tables.Add(podt);
  32.             ds.Tables.Add(poprodt);
  33.             ds.Relations.Add("poprodt", ds.Tables["podt"].Columns["单号"], ds.Tables["poprodt"].Columns["单号"]);
  34. ;
  35. c1FlexGrid1.DataMember = "podt";
  36.             c1FlexGrid1.DataSource = ds;
  37.             c1FlexGrid2.DataMember = "podt.poprodt";
  38.             c1FlexGrid2.DataSource = ds;
复制代码

3.运行时,在c1flexgrid1上选择不同的行,相应的数据会出现在c1flexgrid2上。
按照你描述的步骤,未重现该问题。

麻烦你检查下是否有什么其他的操作影响到了结果,或是将Sample发上来,我帮你看看。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
sanyoumed
初级会员   /  发表于:2014-8-15 10:42:00
板凳
回复 2楼Alice的帖子

我的是vb.net
所以我做了一些修改,但只有 C1flexgrid 有数据,C2flexgrid 一直没有数据,能帮我看下吗:


  Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Dim npodt As DataTable = New DataTable()
        Dim npoprodt As DataTable = New DataTable()

        npodt.TableName = "npodt"
        npoprodt.TableName = "npoprodt"

        npodt.Columns.Add("Customer", GetType(System.String))
        npodt.Columns.Add("单号", GetType(System.String))
        npodt.Columns.Add("Date", GetType(System.DateTime))
        npodt.Columns.Add("Amount", GetType(System.Decimal))

        ' populate data table
        Dim rnd As Random = New Random
        Dim customers As String = "GM|Ford|Chrysler|Toyota|Honda|Mazda|Mitsubishi|Mercedes"
        Dim c As String() = customers.Split("|")
        'string[] customers = "GM|Ford|Chrysler|Toyota|Honda|Mazda|Mitsubishi|Mercedes".Split('|');
        Dim data(3) As Object
        data(0) = New Object()
        data(1) = New Object()
        data(2) = New Object()
        data(3) = New Object()

        'dim myStr as string()

        'object[] data = new object[4];

        For i As Integer = 0 To 7
            data(0) = c(rnd.Next(c.Length - 1))
            data(1) = "单号:" + i.ToString
            data(2) = DateTime.Now.AddDays(-356 * rnd.Next(-365, 0))
            data(3) = rnd.NextDouble() * 10000
            npodt.Rows.Add(data)
        Next

        npoprodt.Columns.Add("单号", GetType(System.String))
        npoprodt.Columns.Add("Details", GetType(System.String))

        Dim data2(1) As Object
        data2(0) = New Object()
        data2(1) = New Object()
        For i As Integer = 0 To 20
            data2(0) = "单号:" + rnd.Next(7).ToString()
            data2(1) = "有关细节" + i.ToString()
            npoprodt.Rows.Add(data2)
        Next
           
        Dim ds As DataSet = New DataSet()

        ds.Tables.Add(npodt.Copy())
        ds.Tables.Add(npoprodt.Copy())
        ds.Relations.Add("poprodt", ds.Tables("npodt").Columns("单号"), ds.Tables("npoprodt").Columns("单号"))

        C1FlexGrid1.DataMember = "npodt"
        C1FlexGrid1.DataSource = ds
        C1FlexGrid2.DataMember = "npodt.poprodt"
        C1FlexGrid2.DataSource = ds

    End Sub


看看是哪里的问题?谢谢
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-15 11:08:00
地板
回复 3楼sanyoumed的帖子

因为数据是随机产生的,个别对应的FlexGrid2下是没有数据的。你可以在FlexGrid1上切换行,发现flexgrid2的数据随之变化。
你的代码我直接复制到本地,测试可用。我做了个VB的工程,你运行下看是否有问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1满意度 +4 收起 理由
sanyoumed + 4 若能解决subtotal函数是否影响显示则更好。

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
sanyoumed
初级会员   /  发表于:2014-8-15 13:11:00
5#
原因找到了:单号后一个是全角的冒号,一个是半角的冒号。不过这个不是最初的问题,但通过这个例子说明这种用法应该是没有问题的。至于第一个问题的显示不全,也许是其它原因。
我再看看。

谢谢您的答复。
回复 使用道具 举报
sanyoumed
初级会员   /  发表于:2014-8-15 14:07:00
6#
进一步的原因找到,我的C1flexgrid2中有数字字段,当使用了 subtotal后,就出现了只显示第一条记录的情况,现在我暂时去掉了subtotal函数的使用,显示明细没有问题了。
您可以试一下 c1flexgrid2在使用subtotal函数的情况的显示情形。

谢谢。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-15 15:33:00
7#
回复 6楼sanyoumed的帖子

好的,如果有什么问题,可以提出来。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-18 10:25:00
8#
回复 6楼sanyoumed的帖子

这是C1FlexGrid2使用了subtotal方法的Sample,我这边测试是可以正常显示的。
看看这个Sample能帮你解决问题不?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部