GridView控件显示Footer
网上找了个合并一列相同信息的事件GridView1_DataBound等。发现Footer也被合并进去了。protected void GridView1_DataBound(object sender, EventArgs e)
{
int row = 0;
for (int i = 1; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].Cells[0].Text == GridView1.Rows[i - 1].Cells[0].Text) {
if (GridView1.Rows[row].Cells[1].RowSpan == 0)
{
GridView1.Rows[row].Cells[0].RowSpan++;
}
GridView1.Rows[row].Cells[0].RowSpan++;
GridView1.Rows[i].Cells[0].Visible = false;
}
else
{
row = i;
}
} 现在我需要分别合并第一列和第二列中相同信息的行,第一列都是一样的信息合并成一大块,第二列是三三二二的合并在一起的。求教下如何解决,自己测试了下发现有了FOOTER后,合并下有点凌乱的。
网上找了个合并一列相同信息的事件GridView1_DataBound等。发现Footer也被合并进去了。protected void GridView1_DataBound(object sender, EventArgs e)
{
int row = 0;
for (int i = 1; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].Cells[0].Text == GridView1.Rows[i - 1].Cells[0].Text) {
if (GridView1.Rows[row].Cells[1].RowSpan == 0)
{
GridView1.Rows[row].Cells[0].RowSpan++;
}
GridView1.Rows[row].Cells[0].RowSpan++;
GridView1.Rows[i].Cells[0].Visible = false;
}
else
{
row = i;
}
} 现在我需要分别合并第一列和第二列中相同信息的行,第一列都是一样的信息合并成一大块,第二列是三三二二的合并在一起的。求教下如何解决,自己测试了下发现有了FOOTER后,合并下有点凌乱的。
解决方案 »
- wince手机浏览wap网页,输入登陆名密码,没有值的问题...
- Response.Write("<script language='javascript' type='text/javascript'
- Response.Redirect()与Server.Transfer()有什么区别
- 谁帮忙找个 .net2.0 版的网站流量分析系统源码!!!! 最好是开源的
- 在Repeater设置RadioButton组的问题
- 关于数据绑定的问题!!!要求效率最高!!求解!!
- [50分求解决办法] 读Excel文件,字符串中有英文字母时,值读不出来
- 求c# 菜单控件
- 请问水晶报表的宽度怎么样调整?谢谢
- 大家来看看这个webform有什么问题(为方便大家检查错误,源代码已经整理过)
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 关于Gridview控件合并某2列相同信息的问题(续)
- 连接App_data下数据库出现操作系统错误 5(拒绝访问。)!时间紧急,求高手答疑
这个是用vs2003的时候写的,现在第三方控件里就有属性合并同样的行了,gridview就没写对应的,你可以把下面的DataGrid1.Items都换成Gridview.Rows用,
private void SpanGrid()
{
int j=DataGrid1.Items.Count;//行数
int u;//自循环所用参数
for (int i = 0;i<j;i++)
{
int inRowSpan = 1;//跨行数
string ItmStr = DataGrid1.Items[i].Cells[0].Text.ToString();
for(u = i+1;u<j;u++)
{
if (ItmStr.Equals(DataGrid1.Items[u].Cells[0].Text.ToString()))
{
inRowSpan += 1;
DataGrid1.Items[i].Cells[0].RowSpan = inRowSpan;//对最歪层所循环行赋要跨行数
DataGrid1.Items[u].Cells[0].Visible = false;//当前被跨行不可见
}
else
{
break;
}
}
i = u - 1;
}
} 看有帮助没有
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="gv" runat="server" onprerender="gv_PreRender"></asp:GridView>
</form>
</body>
</html>int mergeCount = 2; //前两列合并 private DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
dt.Columns.Add(new DataColumn("Name", typeof(String)));
dt.Columns.Add(new DataColumn("Sex", typeof(String)));
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = "0101";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 1;
dr[1] = "0101";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 1;
dr[1] = "01011";
dr[2] = "女";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "01";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "01001";
dr[2] = "女";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 3;
dr[1] = "01001";
dr[2] = "女";
dt.Rows.Add(dr);
return dt;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
gv.DataSource = GetDataTable();
gv.DataBind();
}
} protected void gv_PreRender(object sender, EventArgs e)
{
for (int rowIndex = gv.Rows.Count - 2; rowIndex >= 0; rowIndex--)
{
GridViewRow row = gv.Rows[rowIndex];
GridViewRow previousRow = gv.Rows[rowIndex + 1]; for (int i = 0; i < row.Cells.Count && i < mergeCount; i++)
{
if (row.Cells[i].Text == previousRow.Cells[i].Text)
{
row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
previousRow.Cells[i].RowSpan + 1;
previousRow.Cells[i].Visible = false;
}
}
} }
for (int i = 1; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].Cells[0].Text == GridView1.Rows[i - 1].Cells[0].Text) {
GridView1.Rows[row].Cells[0].RowSpan++;
GridView1.Rows[i].Cells[0].Visible = false;
}
else
{
GridView1.Rows[row].Cells[0].RowSpan++;
row = i;
}
}
GridView1.Rows[row].Cells[0].RowSpan++;
这样可以吗?
能不能在牛逼点。我另开帖子给分!不想在这个帖子加分了。能不能以第一列为首要,第1列的合并为第2列合并的基础。如图cc这个值,既属于A又属于B且相邻在一起,两个值需要以第一列为标准进行区分。
就是第2列里面有个cc这个值,需要根据第一列的进行区分,而不是合并再一起!