DataTable分页

             工作中经常碰到主表和子表这样的设计,它们的关系是1对多。好多页面上显示的是主表上面的数据,可要求按照字表的某一字段进行查询。

这种场景一般有二种解决方法


          第一、通过sql函数将子表要查询的字段用逗号分隔作为主表视图的一个字段。SigleName=dbo.f_str_singlename(Market_ManageContract.Id)。函数代码如下:
CREATE FUNCTION [dbo].[f_str_singlename](@id varchar(50))

RETURNS varchar(8000)

AS

BEGIN

    DECLARE @r varchar(8000)

    SET @r = ''

    SELECT @r = @r + ',' + ItemName

    FROM Market_ManageContractSub

    WHERE ContractId=@id

    RETURN STUFF(@r, 1, 1, '')

END

        第二、以子表为主关联主表建视图,查询时同一主表记录只取一条。


        最近碰到一个设计的时候不是用的子表保存记录,而是用XML的形式保存在主表一个字段里面,

       这种情况下就不能用上面的方法按子表的字段进行查询。只能取出全部数据,再对数据进行过滤。由于过滤后页面上要进行分页。以前的拼SQL进行分页啊的不能用了。

只能对过滤后的数据再进行分页。在网上找到一个方法,将复制行的地方改了下,修改后代码如下:

public  DataTable GetPagedTable(DataTable dt, int PageIndex, int PageSize)
        {

            if (PageIndex == 0)
                return dt;
            DataTable newdt = dt.Clone();
            //newdt.Clear();
            int rowbegin = (PageIndex - 1) * PageSize;
            int rowend = PageIndex * PageSize;

            if (rowbegin >= dt.Rows.Count)
                return newdt;

            if (rowend > dt.Rows.Count)
                rowend = dt.Rows.Count;
            for (int i = rowbegin; i <= rowend - 1; i++)
            {
                //DataRow newdr = newdt.NewRow();
                //DataRow dr = dt.Rows[i];
                //foreach (DataColumn column in dt.Columns)
                //{
                //    newdr[column.ColumnName] = dr[column.ColumnName];
                //}
                //newdt.Rows.Add(newdr);
                newdt.ImportRow(dt.Rows[i]);
            }

            return newdt;
        }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值