본문 바로가기

WEB

C#용 C/S프로그램중 FarPoint SpreadSheet RowSpan기능 함수

이번에 c#으로 된 프로젝트에 잠시 투입되었다가, 뺑이까다가 만든 함수 입니다.
워낙 실력이 허접해서 좀 이상할지도 모르겠지만, 혹시 유용하게 사용하실 분이 계실까 해서 올립니다. ^^



함수명 : SpreadRowSpanFunc
인자 :
@fpSpread : 해당 스프레드
@fromColumn : 시작 칼럼 idx
@toColumn : 마지막 칼럼 idx
기능 : 스프레드의 특정 필드를 rowSpan 시켜준다.

사용법
SpreadRowSpanFunc(fpSpread1, 0, 4);  // 0부터 4번째 칼럼중 동일한 내용을 rowspan 처리 한다.
 		public void SpreadRowSpanFunc(FarPoint.Win.Spread.FpSpread fpSpread, int fromColumn, int toColumn)
		{
			try
			{
				string strTmp = string.Empty;
				Hashtable ht = new Hashtable();
				int startidx = 0;
				int iCnt = 0;

				int rowCount = fpSpread.ActiveSheet.RowCount;

				if (rowCount > 0)
				{
					for (int j = fromColumn; j <= toColumn; j++)
					{ 
						// colum이동후 초기화
						ht = new Hashtable();
						strTmp = "";

						for (int i = 0; i < rowCount; i++)
						{
						 
							if(!strTmp.Equals("") && strTmp.CompareTo(fpSpread.ActiveSheet.Cells[i,j].Value.ToString()) != 0)
							{
								ht.Add(startidx, iCnt);
							}							 

							if(strTmp.CompareTo(fpSpread.ActiveSheet.Cells[i,j].Value.ToString()) != 0)
							{
								strTmp = fpSpread.ActiveSheet.Cells[i,j].Value.ToString();												
								iCnt=0;
								startidx = i;
							} 

							iCnt++;
					 
						}
 
						ht.Add(startidx, iCnt); 

						IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
						while ( myEnumerator.MoveNext() ) 
						{
							fpSpread.ActiveSheet.Cells[Convert.ToInt16(myEnumerator.Key), j].RowSpan = Convert.ToInt16(myEnumerator.Value);
						}

						fpSpread.ActiveSheet.Columns.Get(j).VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
					}
				}
			}
			catch (System.Exception ex) 
			{
				MessageBox.show(ex.Message)
			}
		}