Gridview中某字段的内容相同时如何只显示一个

lqhly 2009-07-17 08:38:27
Gridview中某字段的内容相同时如何只显示一个,即象pb中的数据窗口一样,只显示一个,其余的不显示。因为我有一个租赁合同表,表结构为1.合同号、2.租金付款起始日期、3.租金付款截至日期、4.每次付款的租金,一个合同一般是签多年的比如3年,而租金是按年收取的,我要显示的结果如下:
1.合同号、2.租金付款起始日期、3.租金付款截至日期、4.每次付款的租金
0001 2009-1-1 2010-12-31 1000
2011-1-1 2011-12-31 1000
2012-1-1 2012-12-31 1000
...全文
336 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
wubing1111 2009-09-08
  • 打赏
  • 举报
回复
最好的辦法是自己動態加每行了.加一行時判斷是否與上一條記錄相同,如果相同的就合並.
lqhly 2009-08-06
  • 打赏
  • 举报
回复
真郁闷,用<asp:BoundField </asp:BoundField>方法可以实现相同单元格的合并,
但不能实现网页的链接,用<asp:HyperLinkField或<ItemTemplate><%# DataBinder.Eval等
方法时可以实现链接,但又不能实现相同单元格的合并。
八公山民 2009-08-05
  • 打赏
  • 举报
回复
datagridview里面采用过滤方式处理,totable方法,或者filter,或者用dictionary从新插入新表。
lqhly 2009-08-05
  • 打赏
  • 举报
回复
前台程序为:
<asp:TemplateField HeaderText="客户名称">
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "Khname")%></ItemTemplate>
<ItemStyle Width="2%" BorderWidth="1px" />
<HeaderStyle HorizontalAlign="Center" />
</asp:TemplateField>
后台检索数据的是一个存储过程:
CREATE PROCEDURE Pr_GetHtXsZl

AS

select Fyhtxx.KhId,Fyhtxx.Id Id,Fyhtxx.Fyxx Fj, Fyhtxx.Htno Htno,Fyhtxx.Zlqsrq Zlqsrq,Fyhtxx.Zljzrq Zljzrq,Fyhtxx.Czje ZZj,Fyhtxx.Lrrq Lrrq,Fyhtxx.Htzt Htzt,
Khda.Khname,lc.desn Lc,ld.desn Ld,lq.desn Lq,lp.desn Lp,zlfkmx.Qsrq Zjqsrq,zlfkmx.Jzrq Zjjzrq,zlfkmx.Czje Zj,Lp.ItemId
from Fyhtxx,Khda,item fj,item lc,item ld,item lq,item lp,zlfkmx
where (Khda.KhId = Fyhtxx.KhId and fj.itemid=fyhtxx.fyid
and lc.itemid = (select parentid from item where itemid=fj.itemid)
and ld.itemid = (select parentid from item where itemid=lc.itemid)
and lq.itemid = (select parentid from item where itemid=ld.itemid)
and lp.itemid = (select parentid from item where itemid=lq.itemid) and zlfkmx.Htno = Fyhtxx.Htno)
GO
数据显示都是正常的,为什么在合并相同单元格时,oldTc.Text 和Tc.Text始终为"",这样就造成了oldTc.Text 和Tc.Text始终相等,结果就是把这一列均改成第一行的第一列的内容了。问题出现在那里呢?
lqhly 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 wubing1111 的回复:]
  GridView合並就可以了,我的博客上有代碼.
[/Quote]
我现在用的就是你说的那段程序,关键是GridView中的数据绑定以前是<asp:TemplateField HeaderText="合同号" >
<ItemTemplate> <a href='HtXsZlInfo.aspx?Id= <%# DataBinder.Eval(Container.DataItem,"Id") %>'> <%# DataBinder.Eval(Container.DataItem,"Htno") %> </ItemTemplate>
</asp:TemplateField> 这种方式的,必须要改成<asp:BoundField DataField="Htno" HeaderText="合同号"></asp:BoundField>这种方式才行,我现在的问题是如何在<asp:BoundField></asp:BoundField>里面加链接和加参数
wubing1111 2009-08-05
  • 打赏
  • 举报
回复
GridView合並就可以了,我的博客上有代碼.
lqhly 2009-08-05
  • 打赏
  • 举报
回复
问题找到了,前台用这种以下形式时:
<asp:TemplateField HeaderText="合同号" >
<ItemTemplate><a href='HtXsZlInfo.aspx?Id=<%# DataBinder.Eval(Container.DataItem,"Id") %>'><%# DataBinder.Eval(Container.DataItem,"Htno") %></ItemTemplate>
</asp:TemplateField>
提出来的oldTc.Text和tc.Text始终为"",而用以下形式时
即:
<asp:BoundField DataField="Htno" HeaderText="合同号"> </asp:BoundField>
oldTc.Text和tc.Text才能为真实的值,但如何把<a href='HtXsZlInfo.aspx?Id=<%# DataBinder.Eval(Container.DataItem,"Id") %>'><%# DataBinder.Eval(Container.DataItem,"Htno") %>中的一个链接和两个参数写入到
<asp:BoundField DataField="Htno" HeaderText="合同号"> </asp:BoundField>这种方式中呢


lqhly 2009-08-04
  • 打赏
  • 举报
回复
我用的是以下方法试了第一列,不知为什么,都合并成了第一行的内容,我再用跟踪调试查看oldTc.Text 和tc.Text始终是""这个值,请高手帮我看看到底问题出现在那里?
HtXsZlView.DataSource = dr;
HtXsZlView.DataBind();
GroupCol(HtXsZlView,1);
#region 合并单元格 合并某一列所有行
/// <summary>
/// 合并GridView中某列相同信息的行(单元格)
/// </summary>
/// <param name="GridView1"></param>
/// <param name="cellNum"></param> 列数
public static void GroupCol(GridView GridView1, int cols)
{
if (GridView1.Rows.Count < 1 || cols > GridView1.Rows[0].Cells.Count - 1)
{
return;
}
TableCell oldTc = GridView1.Rows[0].Cells[cols];
for (int i = 1; i < GridView1.Rows.Count; i++)
{
TableCell tc = GridView1.Rows[i].Cells[cols];
if (oldTc.Text == tc.Text)
{
tc.Visible = false;
if (oldTc.RowSpan == 0)
{
oldTc.RowSpan = 1;
}
oldTc.RowSpan++;
oldTc.VerticalAlign = VerticalAlign.Middle;
}
else
{
oldTc = tc;
}
}
}
#endregion
luxie2005 2009-07-17
  • 打赏
  • 举报
回复
用模板列列来处理吧 在模板里面自己写个TABLE 不就解决了
IHandler 2009-07-17
  • 打赏
  • 举报
回复
还是在数据库里处理吧
lqhly 2009-07-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 haonanxxx 的回复:]
http://blog.csdn.net/l18900201/archive/2008/09/27/2989076.aspx参考
http://www.cnblogs.com/hubcarl/archive/2009/05/10/1453489.html参考
[/Quote]

http://www.cnblogs.com/hubcarl/archive/2009/05/10/1453489.html
中有一个XNCJWC.BLL 和
using XNCJWC.BLL;
using XNCJWC.Model;
using XNCJWC.Utility;
namespace XNCJWC.Web
这些是什么东西?我直接拿过来就可以用吗?
lchy110 2009-07-17
  • 打赏
  • 举报
回复
lz莫非是想实现的是两数据控件的嵌套? 网上例子啊
FeelTouch Labs 2009-07-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lcl_data 的回复:]
C# code#region 合并单元格 合并某一行的所有列///<summary>///  合并GridView中某行相同信息的行(单元格)///</summary>///<param  name="GridView1">GridView对象</param>///<param  name="cellNum">需要合并的行</param>publicstaticvoid GroupRow(GridView GridView1,int rows)
  {
  TableCell oldTc= GridView1.Rows[rows].Cells[0];for (int i=1; i< GridView1.Rows[rows].Cells.Count; i++)
  {
  TableCell tc= GridView1.Rows[rows].Cells[i];//Cells[0]就是你要合并的列if (oldTc.Text== tc.Text)
  {
  tc.Visible=false;if (oldTc.ColumnSpan==0)
  {
  oldTc.ColumnSpan=1;
  }
  oldTc.ColumnSpan++;
  oldTc.VerticalAlign= VerticalAlign.Middle;
        }else
        {
          oldTc= tc;
        }
      }
    }#endregion#region 合并单元格 合并一行中的几列///<summary>/// 合并单元格 合并一行中的几列///</summary>///<param name="GridView1">GridView ID</param>///<param name="rows">行</param>///<param name="sCol">开始列</param>///<param name="eCol">结束列</param>publicstaticvoid GroupRow(GridView GridView1,int rows,int sCol,int eCol)
    {
       TableCell oldTc= GridView1.Rows[rows].Cells[sCol];for (int i=1; i< eCol- sCol; i++)
      {
        TableCell tc= GridView1.Rows[rows].Cells[i+ sCol];//Cells[0]就是你要合并的列        tc.Visible=false;if (oldTc.ColumnSpan==0)
        {
          oldTc.ColumnSpan=1;
        }
        oldTc.ColumnSpan++;
        oldTc.VerticalAlign= VerticalAlign.Middle;
      }
    }#endregion#region 合并单元格 合并某一列所有行///<summary>/// 合并GridView中某列相同信息的行(单元格)///</summary>///<param name="GridView1"></param>///<param name="cellNum"></param>publicstaticvoid GroupCol(GridView GridView1,int cols)
    {if (GridView1.Rows.Count<1|| cols> GridView1.Rows[0].Cells.Count-1)
      {return;
      }
      TableCell oldTc= GridView1.Rows[0].Cells[cols];for (int i=1; i< GridView1.Rows.Count; i++)
      {
        TableCell tc= GridView1.Rows[i].Cells[cols];if (oldTc.Text== tc.Text)
        {
          tc.Visible=false;if (oldTc.RowSpan==0)
          {
            oldTc.RowSpan=1;
          }
          oldTc.RowSpan++;
          oldTc.VerticalAlign= VerticalAlign.Middle;
        }else
        {
          oldTc= tc;
        }
      }
    }#endregion#region 合并单元格 合并某一列中的某些行///<summary>/// 合并单元格 合并某一列中的某些行///</summary>///<param name="GridView1">GridView ID</param>///<param name="cellNum">列</param>///<param name="sRow">开始行</param>///<param name="eRow">结束列</param>publicstaticvoid GroupCol(GridView GridView1,int cols,int sRow,int eRow)
    {if (GridView1.Rows.Count<1|| cols> GridView1.Columns.Count-1)
      {return;
      }
      TableCell oldTc= GridView1.Rows[sRow].Cells[cols];for (int i=1; i< eRow- sRow; i++)
      {
        TableCell tc= GridView1.Rows[sRow+ i].Cells[cols]; 
        tc.Visible=false;if (oldTc.RowSpan==0)
        {
          oldTc.RowSpan=1;
        }
        oldTc.RowSpan++;
        oldTc.VerticalAlign= VerticalAlign.Middle;
      }
    }#endregion
[/Quote]是一种方法,编程的吗!就不要太麻烦,多锻炼。
另外,用repeater控件试试,第三方控件尽量别用
yudi010 2009-07-17
  • 打赏
  • 举报
回复
方法很多,但是sql里面不可取
YouJason 2009-07-17
  • 打赏
  • 举报
回复
做两个gridview,一个显示合同号,点击合同号,就显示这个合同号的详细信息的gridview.
unling 2009-07-17
  • 打赏
  • 举报
回复
可以这样在
使用sql查询的时候就出去相同类容的行(distinct)
然后再绑定gridview
xfreyes 2009-07-17
  • 打赏
  • 举报
回复
你数据怎么取得的?

取数据的sql里distinct一下不就好了?
wolf1118baby 2009-07-17
  • 打赏
  • 举报
回复
Sql语句查询的时候固定显示列,要不就在加载列的时候判断屏蔽。
wolf1118baby 2009-07-17
  • 打赏
  • 举报
回复
Sql语句查询的时候固定显示列,要不就在加载列的时候判断屏蔽。
快乐乔巴 2009-07-17
  • 打赏
  • 举报
回复
合并的话是有点麻烦
我是在 GridView_DataBound中一条一条判断修改他们的
比如这条和下面一条数据一样,我就把这条的rowspan设置成2(根据你相同条数来定义)
循环到下一条的时候 把这个数据的值给清空就可以了
加载更多回复(7)

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧