起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: xhong

【结】存储过程的查询结果标题在datagrid中的显示被截断?

[复制链接]
 楼主| 发表于 2010-6-29 10:19:02 | 显示全部楼层
测试存储过程:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].test
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE  proc [dbo].test

as
begin
exec (
'select fvalue ,forderindex as ''fadfasd|齐齐哈尔机床二集团分公司|齐齐哈尔齐齐哈尔齐齐哈尔齐齐哈尔齐齐哈尔'' from am_tconfig')
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

平台中:
1.建立存储过程数据集,存储过程名为上边的test。
2.窗体中infoBroker1,dataSetBroker1,datasetBroker1指向存储过程数据集,DataGrid数据源为datasetBroker1,查看属性中选中edgoMultiTitle,页眉最小行3。
3,代码:
DataSetBroker1.DataSet.Close;
  DataSetBroker1.DataSet.Active := true;
  DataSetBroker1.DataSet.Open;

下图是测试结果: :1eye:

测试结果.jpg

15 KB, 下载次数: 130

回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-29 10:21:44 | 显示全部楼层
存储过程如下 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PlantHProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[PlantHProc]
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE  proc [dbo].PlantHProc
(
    @PlantTypeID varchar(8000)
)
as
begin
DECLARE @PlantNameS VARCHAR(8000)
SELECT @PlantNameS=''
SELECT @PlantNameS=@PlantNameS+',Max(CASE TPB.PlantName WHEN '''+PlantName+''' THEN TPP.ParamValue ELSE NULL END) AS '+QUOTENAME(PlantName+'|'+PlantModel
+'|'+Manufacture)
FROM (
select TPB.PlantName,TC.FValue,TPP.ParamValue,TPB.PlantModel,TPB.Manufacture
from AM_TPLANTBASEINFO TPB
join AM_TPLANTPARAMS TPP on TPP.PID=TPB.PID
join AM_TCOnfig TC on TC.FType=TPP.PlantTypeGUID and TC.FKey=TPP.ParamItemID
join AM_TConfig TCC on TCC.FKey=TPB.PlantType and TCC.FType='设备类别'
where TCC.Fkey=@PlantTypeID
) a GROUP BY PlantName,PlantModel,Manufacture
exec (
'select TC.FType,TC.FKey,SubString(TC.FValue,0,CharIndex(''|'',TC.FValue,0)) as MaxType,SubString(TC.FValue,CharIndex(''|'',TC.FValue,0)+1,len(TC.Fvalue)-
CharIndex(''|'',TC.FValue,0)) as MinType'+@PlantNameS+'
from AM_TPLANTBASEINFO TPB
join AM_TPLANTPARAMS TPP on TPP.PID=TPB.PID
join AM_TCOnfig TC on TC.FType=TPP.PlantTypeGUID and TC.FKey=TPP.ParamItemID
join AM_TConfig TCC on TCC.FKey=TPB.PlantType and TCC.FType=''设备类别''
where TCC.Fkey='''+@PlantTypeID+''' group by TC.FType,TC.FKey,TC.FValue')
end

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
回复 支持 反对

使用道具 举报

发表于 2010-6-29 15:01:42 | 显示全部楼层
楼主,我们按照你所描述的测试了一下,按你的做法确实存在问题,原因是你这种做法是在服务端实现的这种多级表头,而这个过程中列名传到客户端时,被截断了。(好像31字符)

这个只能后续的版本中来处理了(短期内可能还处理不了)
目前变通的解决方法是:在客户端做这个多级表头的设置,即你可以代码修改datagrid的column的caption属性就没事。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-29 16:10:10 | 显示全部楼层
我这个表头是在服务器端获取的 数据集传过来的时候已经被截断了 客户端没法处理啊 相当于客户端得不到数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-29 16:14:50 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2010-6-29 16:30:14 | 显示全部楼层
是啊,13楼说的就是这个意思啊

所以如果要实现你的需求,表头就不要从服务端获取,而要在客户端的DataGrid控件里的相关属性里设置
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-29 16:36:24 | 显示全部楼层
我不在服务端获取数据 怎么在客户端设置? 哪来的数据让我设置呢?
回复 支持 反对

使用道具 举报

发表于 2010-6-29 16:38:01 | 显示全部楼层
表头的内容不固定吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-30 09:40:06 | 显示全部楼层
对 表头是动态生成的
回复 支持 反对

使用道具 举报

发表于 2010-6-30 09:43:13 | 显示全部楼层
那目前是没有好的办法了,只能表头字符长度小于等于31(一个汉字算两个字符)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-8 10:40 , Processed in 0.044571 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表