本帖最后由 u012992506 于 2014-03-12 17:30:46 编辑

解决方案 »

  1.   

    将CombinationDetail的值取出或绑定在一个隐藏域控件中,当外层的行绑定事件中写代码获取当前行的隐藏域控件值并按“,”分割字符串,并循环SQL查询每一个ID(如果我理解你意思正确的话应该差不多这个思路)。
      

  2.   


    我当初的想法和你差不多,C#里面取到此商品的CombinationDetail值,然后根据“,”拆分,再循环带入SQL里面查出值,就是一直没写出来
      

  3.   


    比如说?获取所有被关联的记录ID
    select left(CombinationDetail,len(CombinationDetail)-1) as CombinationDetail
    From
     (Select (select cast(CombinationDetail as nvarchar),',' from T_ERP_Item Where isnull(CombinationDetail,'')<>'' FOR XML PATH('') ) as CombinationDetail) tb然后获取id 不在CombinationDetail里面的记录缺点,如果数据大多,导致长符串超过SQL所限制的长度,CombinationDetail将被截断
      

  4.   


    比如说?获取所有被关联的记录ID
    select left(CombinationDetail,len(CombinationDetail)-1) as CombinationDetail
    From
     (Select (select cast(CombinationDetail as nvarchar),',' from T_ERP_Item Where isnull(CombinationDetail,'')<>'' FOR XML PATH('') ) as CombinationDetail) tb然后获取id 不在CombinationDetail里面的记录缺点,如果数据大多,导致长符串超过SQL所限制的长度,CombinationDetail将被截断首先,谢谢哥们你的建议,我也详细测试研究了一下,可能是我表述的不是很清楚,上面的数据只是我测试的数据,我的意思是:只把CombinationDetail里面的所有数据拆分开,再取出各个ID相对应的数据就行了
      

  5.   

    GridView嵌套在绑定DataRow的事件里写不就完了吗        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                DataRowView row = e.Row.DataItem as DataRowView;
                row["CombinationDetail"] //这里获取记录对应的数据
           
            }
      

  6.   

    是否可以把"CombinationDetail"里的值改为文本,到调用的时候再转换回来???当然,这只是提供一个思路参考
      

  7.   

    分两步取,用ID把CombinationDetail的值取出来, CombinationDetail的值针对每个ID用,隔开分割, 然后每个ID不就出来了吗如果需要用ID大小排序 可以把分割出来的所有ID冒泡排序查询。。
      

  8.   


    这种方法我也试过,还是实现不了,CombinationDetail里面是nvarchar类型存储的值,ID是int类型,现在用ID in CombinationDetail 就会报错,数据转换的方式我都尝试过了,还是谢了
      

  9.   


     CombinationDetail里面每个ID值分隔开只是完成了第二步,还需要把这些ID全部带到查询语句中,查出这些ID所对应的相关信息
      

  10.   


    兄弟,GridView嵌套方法我已经实现了,并且CombinationDetail里面每个ID值分隔开也只是完成了第二步,还需要把这些ID全部带到查询语句中,查出这些ID所对应的相关信息,代码如下,求教:              //此句属GridView嵌套方法,无需理会
                  ASPxGridView  dd=(ASPxGridView )sender ;
                  string SkuId = dd.GetMasterRowFieldValues("Id").ToString();              //查询此商品ID对应的CombinationDetail信息
                  DataSet ComInfoDt = BusinessProtect.BaseInfo.ItemNew.SkuComInfoExecuteDataSet(SkuId);
                  //得出 ComSkuId = 6678;6685;
                  string ComSkuId = ComInfoDt.Tables[0].Rows[0]["CombinationDetail"].ToString();
                 
                //利用";"分割字符 
                  string[] str = Common.strProcess.strCommaIntercept(ComSkuId);
                 string ComID="";              //获取分割出来的值,利用 foreach循环带入绑定值
                  foreach (string c in str)
                  {
                      ComID = c.ToString();
                      dd.DataSource = BusinessProtect.BaseInfo.ItemNew.SkuComInfoExecuteDataSet(ComID);
                  }
                  //这里是个关键,每个值都能带进去,但是绑定到下个值时,上条数据就被替代了,我想全部显示
      

  11.   


    这种方法我也试过,还是实现不了,CombinationDetail里面是nvarchar类型存储的值,ID是int类型,现在用ID in CombinationDetail 就会报错,数据转换的方式我都尝试过了,还是谢了
    分表试试,单商品为一个表,组合商品引用单商品表
      

  12.   

     1.循环ID数组查询到每一个ID对应的值
     2.每for一次就 list.add()一次添加到list集合中,然后gridview就可以绑定了。当然可以针对list来排序会进行其他操作。
      

  13.   

    不用分隔啊,SQL语句中有这么一个用法"Select  * From table Where id in("+ row["CombinationDetail"].ToString() +")"
      

  14.   

    谢谢各位的热心帮助,弄了三天,建了个存储过程,这个问题终于解决了!
    代码贴上来,大家共同学习,有好的建议欢迎提出!
    CREATE  PROCEDURE [dbo].[Proc_SelectComSkuChild]
    (
    @SkuId nvarchar(50)
    )
    ASdeclare @skus nvarchar(max)BEGIN set @skus = (select CombinationDetail from T_ERP_Sku where Id = @SkuId)
    select [Id] ,[ItemOuterId] ,[OuterId] 
    from [dbo].[T_ERP_Sku] 
    where  ';'+RTRIM(@skus)+';' like '%;'+RTRIM([Id])+';%' END