合并
/// <summary>
/// </summary>
/// <param name="grid">要被合并的表格</param>
/// <param name="count">合并前面多少列</param>
/// <param name="coloumDefault">合并时依赖的列名称</param>
public static void MergedCell(Infragistics.Win.UltraWinGrid.UltraGrid grid,int count,string coloumDefault)
{
for (int i = 0; i < count; i++)
{
CustomMergedCellEvaluator _CustomMergedCellEvaluator = new CustomMergedCellEvaluator();
_CustomMergedCellEvaluator._coloumnDefault = coloumDefault;
grid.DisplayLayout.Bands[0].Columns[i].MergedCellEvaluator = _CustomMergedCellEvaluator;
grid.DisplayLayout.Bands[0].Columns[i].MergedCellStyle = MergedCellStyle.Always;
grid.DisplayLayout.Bands[0].Columns[i].MergedCellAppearance.TextVAlign = Infragistics.Win.VAlign.Middle;
}
}
public static void MergedCell(Infragistics.Win.UltraWinGrid.UltraGrid grid, string[] coloumns, string coloumDefault)
{
for (int i = 0; i < coloumns.Length; i++)
{
CustomMergedCellEvaluator _CustomMergedCellEvaluator = new CustomMergedCellEvaluator();
_CustomMergedCellEvaluator._coloumnDefault = coloumDefault;
grid.DisplayLayout.Bands[0].Columns[coloumns[i]].MergedCellEvaluator = _CustomMergedCellEvaluator;
grid.DisplayLayout.Bands[0].Columns[coloumns[i]].MergedCellStyle = MergedCellStyle.Always;
grid.DisplayLayout.Bands[0].Columns[coloumns[i]].MergedCellAppearance.TextVAlign = Infragistics.Win.VAlign.Middle;
}
}
public class CustomMergedCellEvaluator : Infragistics.Win.UltraWinGrid.IMergedCellEvaluator
{
public CustomMergedCellEvaluator() { }
public string _coloumnDefault = string.Empty;
public bool ShouldCellsBeMerged(UltraGridRow row1, UltraGridRow row2, UltraGridColumn column)
{
if (_coloumnDefault != string.Empty && _coloumnDefault != "")
{
if (row1.Cells.Exists(this._coloumnDefault))
{
try
{
object v1 = row1.Cells[this._coloumnDefault].Value;
object v2 = row2.Cells[this._coloumnDefault].Value;
return v1.Equals(v2);
}
catch {
return true;
}
}
else
{
return true;
}
}
else
{
//未指定 主列,则默认一直合并
return true;
}
}
}
更新
/// <summary>
/// 根据依赖列 更新相应列/// </summary>
/// <param name="judgeColoumn">判断依据所在列</param>
/// <param name="judgeValue">判断依据所在列当前单元格值</param>
/// <param name="newValue">当前修改的单元格值</param>
/// <param name="uc">当前修改的单元格所在列</param>
/// <param name="ug">当前表格</param>
/// <param name="CellEventHandler">当前表格单元格修改后事件委托
/// (由于事件为单元格更新,此方法用来按一定条件更新此列其他单元格,
/// 因此会陷入死循环),所以每次在更新前,要去掉此事件,在完成后再加上</param>
public static void UpdateCellValueByCondition(
string judgeColoumn,
object judgeValue,
object newValue,
Infragistics.Win.UltraWinGrid.UltraGridColumn uc,
Infragistics.Win.UltraWinGrid.UltraGrid ug,
Infragistics.Win.UltraWinGrid.CellEventHandler CellEventHandler
)
{
ug.AfterCellUpdate -= CellEventHandler;
for (int i = 0; i < ug.Rows.Count; i++)
{
Infragistics.Win.UltraWinGrid.UltraGridRow ur = ug.Rows[i];
if (ur.Cells[judgeColoumn].Value.Equals(judgeValue))
{
ur.Cells[uc].Value = newValue;
}
}
ug.AfterCellUpdate += CellEventHandler;
}
/// <summary>
/// 根据依赖列 更新相应列
/// </summary>
/// <param name="judgeColoumn">判断依据所在列</param>
/// <param name="judgeValue">判断依据所在列当前单元格值</param>
/// <param name="newValue">当前修改的单元格值</param>
/// <param name="uc">当前修改的单元格所在列</param>
/// <param name="ug">当前表格</param>
/// <param name="CellEventHandler">当前表格单元格修改后事件委托
/// (由于事件为单元格更新,此方法用来按一定条件更新此列其他单元格,
/// 因此会陷入死循环),所以每次在更新前,要去掉此事件,在完成后再加上</param>
public static void UpdateCellValueByCondition(
string[] judgeColoumn,
object[] judgeValue,
object newValue,
Infragistics.Win.UltraWinGrid.UltraGridColumn uc,
Infragistics.Win.UltraWinGrid.UltraGrid ug,
Infragistics.Win.UltraWinGrid.CellEventHandler CellEventHandler
)
{
ug.AfterCellUpdate -= CellEventHandler;
for (int i = 0; i < ug.Rows.Count; i++)
{
Infragistics.Win.UltraWinGrid.UltraGridRow ur = ug.Rows[i];
if (judgeColoumn != null && judgeValue != null && judgeColoumn.Length == judgeValue.Length)
{
bool Vaild = true;
for (int j = 0; j < judgeColoumn.Length; j++)
{
if (!ur.Cells[judgeColoumn[j]].Value.Equals(judgeValue[j]))
{
Vaild = false;
}
}
if (Vaild)
{
ur.Cells[uc].Value = newValue;
}
}
}
ug.AfterCellUpdate += CellEventHandler;
}