Dev ASPxGridView 根据关键列分组合并单元格

Dev ASPxGridView 根据关键列分组合并单元格 :
List lMergeFileds=New List{…};//预定义需要合并的列名集合
string sMergeByKey=“业务编号”;//根据哪列进行单元格合并,在这里定义,比如我根据业务编号分组合并,即相同业务编号内合并

 protected void ASPxGridView1_CustomCellMerge(object sender, ASPxGridViewCustomCellMergeEventArgs e)
         {
             /*
              *在这种情况下,可以处理CustomCellMerge事件来手动实现单元格合并。该事件对列中的每对相邻单元格激发。
              *事件参数属性提供有关已处理列(列)、包含已处理单元格的行的可见索引(RowVisibleIndex1和RowVisibleIndex2)及其值(Value1和Value2)的信息。
             * 若要提供自定义合并逻辑,请将Handled属性设置为true,并使用Merge属性指定是否应合并当前处理的单元格。如           果合并单元格,则结果单元格值等于Value1。
             
             *注意:行合并后,会无法选定焦点行,焦点行失效,不出现焦点行,也无法选定当前行上屏修改数据
              */
             string sFiledName = "";//当前单元格所在列的列名定义
             sFiledName = ((GridViewEditDataColumn)e.Column).FieldName;//由于e.Column继承GridViewEditDataColumn父类,所以强转成父类然后调用FieldName即可获取列名

             if (lMergeFileds.Contains(sFiledName))//lMergeFileds:List集合,即需要合并列的列名集合,sFiledName:当前单元格所在列名
             {
                 int iFirst_Row = e.RowVisibleIndex1;//当前行的行号
                 int iSecond_Row = e.RowVisibleIndex2;//下一行的行号
                 object oFirst_Value = e.Value1;//当前行单元格的值
                 object oSecond_Value = e.Value2;//下一行单元格的值
                 object oYwbh_First = ASPxGridView1.GetRowValues(iFirst_Row, sMergeByKey);//获取当前行关键列的单元格的值,注:关键列是指依据哪列进行合并的列名(字符型)
                 object oYwbh_Second = ASPxGridView1.GetRowValues(iSecond_Row, sMergeByKey);//获取第二行关键列的单元格的值,注:关键列是指依据哪列进行合并的列名(字符型)

                 if (oYwbh_First.Equals(oYwbh_Second))//当第一行业务编号与第二行业务编号相同时
                 {
                     if (oFirst_Value.Equals(oSecond_Value))//当第一行单元格的值与第二行单元格的值相同时
                     {
                         e.Merge = true;//合并
                     }
                     else//当第一行单元格的值与第二行单元格的值不相同时
                     {
                         e.Merge = false;//不合并
                     }
                 }
                 else//当第一行业务编号与第二行业务编号不相同时
                 {
                     e.Merge = false;
                 }

             }
             e.Handled = true;//关键代码:此句负责执行上面的合并,刷新客户端的表格中的合并情况
         }

秋风写淄博 业务联系与技术交流:QQ:375172665

在ASP.NET中,特别是使用C#和GridView控件时,合并单元通常是为了创建更复杂的表布局。你可以通过以下几个步骤来实现某一行某列的合并: 1. 首先,确保你已经有一个GridView控件,并设置了数据源。 2. 在GridView的模板列(TemplateField)上添加一个TableCell控件,这将是合并的基础。例如: ```xml <asp:TemplateField HeaderText="合并单元"> <ItemTemplate> <table border="0" cellpadding="0" cellspacing="0"> <tr> <%-- 这里将显示普通单元的内容 --%> <td> <%= Eval("Column1") %> <!-- 替换为实际字段名 --> </td> <td class="merged-cell"> <asp:Label ID="MergedLabel" runat="server"></asp:Label> </td> </tr> </table> </ItemTemplate> </asp:TemplateField> ``` 3. 在服务器端代码(如C#)中,当你需要合并特定行和列时,可以在`ItemDataBound`事件处理程序中操作。例如,在第一列的最后一个单元插入合并标签,并设置其接下来的所有单元作为它的内容: ```csharp protected void GridView1_ItemDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowIndex == intendedRowIndex && e.ColumnIndex == intendedMergeColumnIndex - 1) { Label mergedCell = (Label)e.Row.FindControl("MergedLabel"); if (mergedCell != null) { // 获取要合并到当前行的后续所有单元的内容 TableCell nextCell; for (int i = e.ColumnIndex + 1; i < e.Cells.Count; i++) { nextCell = e.Cells[i]; mergedCell.Text += nextCell.Text; // 移除这些单元以便于渲染合并后的效果 e.Controls.Remove(nextCell); } } } } ``` 4. 确保为合并单元添加CSS样式,使其看起来像是一整行的一部分,而不是单独的单元
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值