gridview 问题

malei45 2011-04-11 01:29:48
目前的效果大概是

id name sex type us
1 123 1 2 313-11
1 123 1 3 113-21
2 21 2 3 322-10




想实现的效果 是

id name sex type us
1 123 1 2-3 313-11/113-21
2 21 2 3 322-10


应该能看懂吧。 求 实现
...全文
146 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
wx8849 2011-04-12
  • 打赏
  • 举报
回复
直接用sql语句解决吧~这样减少你的代码量
malei45 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 huangwenquan123 的回复:]
没处理之前

处理后
[/Quote]
功能是基本实现了 但是 要显示的内容 是从数据库里 添加的
也就是说 重复数 未知
最好是先判断一下 id列 是否与下一个相同 如果相同 则 某些 列 + 一块
huangwenquan123 2011-04-11
  • 打赏
  • 举报
回复
没处理之前

处理后
huangwenquan123 2011-04-11
  • 打赏
  • 举报
回复
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>测试</title>
<script type="text/javascript">
window.onload=function(){
var tr = document.getElementById("GridView2").getElementsByTagName("tr");
for(var i=0;i<tr.length;i++){
var td = tr[i].getElementsByTagName("td");
if(td.length>0){
var id = td[0].innerHTML;
var name = td[1].innerHTML;
for(var j=i+1;j<tr.length;j++){
var comparetd = tr[j].getElementsByTagName("td");
var compareid = comparetd[0].innerHTML;
var comparename = comparetd[1].innerHTML;
if(id==compareid){
name=name+"-"+comparename;
td[1].innerHTML=name;
document.getElementById("GridView2").getElementsByTagName("tbody")[0].removeChild(tr[j]);
}
}
}
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" >
<Columns>
<asp:BoundField HeaderText="ID" DataField="ID" />
<asp:BoundField HeaderText="Name" DataField="Name" />
</Columns>
</asp:GridView>
</form>
</body>
</html>

 protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView2.DataSource = getTable();
GridView2.DataBind();
}
}
public DataTable getTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(System.Int32));
dt.Columns.Add("Name", typeof(System.String));
DataRow row = dt.NewRow();
row[0] = 1;
row[1] = 1;
dt.Rows.Add(row);
DataRow row1 = dt.NewRow();
row1[0] = 1;
row1[1] = 2;
dt.Rows.Add(row1);
DataRow row2 = dt.NewRow();
row2[0] = 2;
row2[1] = 2;
dt.Rows.Add(row2);
DataRow row3 = dt.NewRow();
row3[0] = 2;
row3[1] = 3;
dt.Rows.Add(row3);
return dt;
}
malei45 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 malei45 的回复:]
简单的说 我是想让 id相同的 重复列 都加在一块
id name
1 1
1 2


实现为
id name
1 1-2
[/Quote]
就是这样的效果
malei45 2011-04-11
  • 打赏
  • 举报
回复
简单的说 我是想让 id相同的 重复列 都加在一块
id name
1 1
1 2


实现为
id name
1 1-2
asmin888 2011-04-11
  • 打赏
  • 举报
回复
首先, select distinct 字段 from 表1 (取出不同的记录)
然后, 绑定gridview(id name sex type us),
其中us数据来自select us from 表2 group by id
这样就可以
malei45 2011-04-11
  • 打赏
  • 举报
回复
这个合并 真彻底。
按 你的做法 只有第一条数据 后面不同的都没有了
malei45 2011-04-11
  • 打赏
  • 举报
回复
恩 我也感觉 我说不到正点上。 头像 确实不好看。
yangchun1213 2011-04-11
  • 打赏
  • 举报
回复
看到你头像就想吐,你的描述和你的头像一样丑
tongjingjingisfly 2011-04-11
  • 打赏
  • 举报
回复
我个人人为 可以查询数据时合并 然后显示出来
malei45 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 liue_0612 的回复:]
代码[/Quote]

恩 这个 相同项是 合并了 不同的列是否 能 + 在一起?
liue_0612 2011-04-11
  • 打赏
  • 举报
回复
#region 合并gridview中相同项
public static void CellTogetherArry(int[] cellIndex, GridView gvTemp)
{
for (int x = 0; x < cellIndex.Length; x++)
{
int i = 0;
int rowSpanNum = 1;
while (i < gvTemp.Rows.Count - 1)
{
GridViewRow gvr = gvTemp.Rows[i];
for (++i; i < gvTemp.Rows.Count; i++)
{
GridViewRow gvrNext = gvTemp.Rows[i];
if (gvr.Cells[cellIndex[x]].Text == gvrNext.Cells[cellIndex[x]].Text)
{

if ((cellIndex[x] >= 1) &&
(gvr.Cells[cellIndex[x] - 1].Text != gvrNext.Cells[cellIndex[x] - 1].Text))
{
gvr.Cells[cellIndex[x]].RowSpan = rowSpanNum;
rowSpanNum = 1;
break;
}
else
{
gvrNext.Cells[cellIndex[x]].Visible = false;
rowSpanNum++;
}
}
else
{
gvr.Cells[cellIndex[x]].RowSpan = rowSpanNum;
rowSpanNum = 1;
break;
}
if (i == gvTemp.Rows.Count - 1)
{
gvr.Cells[cellIndex[x]].RowSpan = rowSpanNum;
}
}
}
}
}

public static void GroupRows(GridView p_GridView, int[] p_ColumnsIndex)
{
int _Count = p_GridView.Rows.Count;
string[] _TempText = new string[p_ColumnsIndex.Length];
int[] _RowIndex = new int[p_ColumnsIndex.Length];
for (int i = 0; i != _Count; i++)
{
string _CellText = string.Empty;
for (int z = 0; z != p_ColumnsIndex.Length; z++)
{
_CellText += p_GridView.Rows[i].Cells[p_ColumnsIndex[z]].Text;
if (_TempText[z] == _CellText)
{
p_GridView.Rows[i].Cells[p_ColumnsIndex[z]].Visible = false;
p_GridView.Rows[_RowIndex[z]].Cells[p_ColumnsIndex[z]].RowSpan++;
}
else
{
_RowIndex[z] = i;
_TempText[z] = _CellText;
p_GridView.Rows[_RowIndex[z]].Cells[p_ColumnsIndex[z]].RowSpan = 1;
}
}
}
}
#endregion

调用: int[] cells = new int[] { 0, 1, 2, 3, 4 };
GroupRows(GridView1, cells);
cells指要合并的单元格
moonwrite 2011-04-11
  • 打赏
  • 举报
回复
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{GridView1.Rows[i]
.......
http://blog.csdn.net/21aspnet/archive/2007/03/25/1540301.aspx
自己找把
cong1212 2011-04-11
  • 打赏
  • 举报
回复
建立该表映和射的临时表,然后用游标遍历验证,如ID重复,将值组装再插入临时表
malei45 2011-04-11
  • 打赏
  • 举报
回复
回 6楼:
恩 这个 靠谱 。
关键 怎么 对 里面的数据进行判断? 求 代码 实现
malei45 2011-04-11
  • 打赏
  • 举报
回复
回 5楼:
是不是我表达问题。 都说不到关键呢?

我是想让在 GRIDVIEW中的 有重复id的后几列 自加 起来
就是 没个id 只出现一次
liue_0612 2011-04-11
  • 打赏
  • 举报
回复
可以在页面上 对gridview里的数据进行判断 如果有相同的值就合并 这样对lz可取吗?不过或许样式跟lz想要的有点不同
q107770540 2011-04-11
  • 打赏
  • 举报
回复
若ID是主键
在取数据源时 先以id进行 group by
malei45 2011-04-11
  • 打赏
  • 举报
回复
有啥不明白的 问啊 。
加载更多回复(2)

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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