遇到datagrid问题

关于DataGrid中合并行及其preRender事件

解决方法:

即进行合并行操作,此时可用到DataGridpreRender事件:

private void DataGrid2_PreRender(object sender, System.EventArgs e)

{

     JoinCells.Jion(this.DataGrid2,2);

}

 

JoinCells类:

public class JoinCells

{

     public JoinCells()

     { }

 

/// <summary>

     /// 合并DataGrid中相同内容的行

     /// </summary>

     /// <param name="objDG">所要操作的DataGrid</param>

     /// <param name="index">指出对第0列到第index列,每列中相同内容的行进行合并</param>

     public static void Jion(DataGrid objDG,int index)

     {

         for(int i=0;i<=index;i++)

         {

              TableCell tcNow=objDG.Items[0].Cells[i];

              for(int j=1;j<objDG.Items.Count;j++)

              {

                   TableCell tcNext=objDG.Items[j].Cells[i];

                   if(tcNext.Text.Trim()==tcNow.Text.Trim()&&CheckPre(objDG,j,i))

                   {

                       tcNext.Visible =false;

                       if(tcNow.RowSpan ==0)

                       {

                            tcNow.RowSpan =1;

                       }

                       tcNow.RowSpan +=1;

                       tcNow.VerticalAlign =VerticalAlign.Middle;

                   }

                   else

                   {

                       tcNow=tcNext;

                   }

              }

         }

     }

 

 

//做简单的向前检查,看所要合并的两行是否属同一系列,

//(避免将上海的数码相机与北京的数码相机合并)

 

     private static bool CheckPre(DataGrid objDG,int rowIndex,int colIndex)

     {

         if(colIndex==0)

         {

              return true;

         }

         Else if(objDG.Items[rowIndex-1].Cells[colIndex-1].Text.Trim()==objDG.Items[rowIndex].Cells[colIndex-1].Text.Trim())

         {

              return true;

         }

         else

         {

              return false;

         }

     }

 

 

关于DataGrid中实现跨行表头

解决方法:

 

 

首先,为DataTable添加一个空行:

objDS=new DataSet();

objDS=DataAccess.ExecProc(procName);

//添加空DataRow,并排序

DataTable dt=objDS.Tables[0];

DataRow dr=dt.NewRow();

dt.Rows.Add(dr);

DataView myDataView = dt.DefaultView;    

myDataView.Sort = "AreaName ASC";

this.dgDeposit.DataSource =dt;

this.dgDeposit.DataBind();

 

接着,对表头进行处理:

Private void dgDeposit_ItemDataBound(object sender,DataGridItemEventArgs e)

{

     flag++;

     if(flag==1)//处理原表头

     {

         for(int i=0;i<=4;i++)

         {

              e.Item.Cells[i].RowSpan =2;

         }

 

         e.Item.Cells[5].ColumnSpan =2;

         e.Item.Cells[5].Text =title;

         e.Item.Cells[5].HorizontalAlign =HorizontalAlign.Center;

 

//由于某些单元格占用了多列多行,会将原有的单元格向右挤,须删去

         for(int i=0;i<1;i++)

         {

              e.Item.Cells.RemoveAt(6);

         }

     }

     else if(flag==2)//处理新插入的空行,以作多行表头

     {

         for(int i=0;i<2;i++)

         {

              e.Item.Cells[i].Text =sArray[i];

              e.Item.Cells[i].Width =Unit.Pixel(50);

              e.Item.Cells[i].BackColor =Color.RoyalBlue;

         }

 

         //由于某些单元格占用了多列多行,会将原有的单元格向右挤,须删去

         for(int i=0;i<5;i++)

         {

              e.Item.Cells.RemoveAt(2);

         }

     }

}

转载于:https://www.cnblogs.com/fj-ygc/archive/2008/08/07/1263101.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值