DataGridView控件添加鼠标选定ToolTip显示合计
来源:互联网 发布:linux 大于1g的文件 编辑:程序博客网 时间:2024/06/18 12:38
/// <summary> /// DataGridView多行选择求和 /// </summary> /// <param name="myDataGridView">要求合计提示的DataGridView控件</param> /// <param name="TooLar">传入的ToolTip控件.</param> /// <returns></returns> public bool DataGridViewSum(DataGridView myDataGridView, ToolTip TooLar) { if (myDataGridView.SelectedCells.Count < 2) { TooLar.RemoveAll(); return false; } //如果选择的单元格是全部,且大于:10000,则认为是不是求合计的操作 if (myDataGridView.SelectedCells.Count > 10000 && myDataGridView.SelectedCells.Count == myDataGridView.GetCellCount(DataGridViewElementStates.None)) { TooLar.RemoveAll(); return false; } DataSet DS = new DataSet(); DataTable DtGroup = new DataTable("DtGroup");//保存列名 System.Collections.ArrayList NameMaxLength = new System.Collections.ArrayList();//保存DT中列名的长度 System.Collections.ArrayList ValueMaxLength = new System.Collections.ArrayList();//保存DT中列名的长度 DataTable DT = new DataTable("DT");//保存列名及数据 DtGroup.Columns.Add("ColumnName", System.Type.GetType("System.String"));//字段名 DT.Columns.Add("ColumnName", System.Type.GetType("System.String"));//字段名 DT.Columns.Add("ColumnValue", System.Type.GetType("System.Decimal"));//字段值 foreach (DataGridViewCell DC in myDataGridView.SelectedCells) { if (DC.ValueType.Name.ToLower() == "decimal" || DC.ValueType.Name.ToLower() == "int32") { DataRow DR; DR = DT.NewRow(); DR["ColumnName"] = myDataGridView.Columns[DC.ColumnIndex].Name; if (DC.Value == null) { DR["ColumnValue"] = 0; } else { DR["ColumnValue"] = DC.Value; ValueMaxLength.Add(DC.Value.ToString().Length); } DT.Rows.Add(DR); //在现有DtColName中查找是否包含了这个列名 if (DtGroup.Select("ColumnName='" + myDataGridView.Columns[DC.ColumnIndex].Name + "'").Length == 0) { DataRow DR1; DR1 = DtGroup.NewRow(); DR1["ColumnName"] = myDataGridView.Columns[DC.ColumnIndex].Name; DtGroup.Rows.Add(DR1); NameMaxLength.Add(myDataGridView.Columns[DC.ColumnIndex].Name.Length); } } } DS.Tables.Add(DT); DS.Tables.Add(DtGroup); DataRelation dRelation = new DataRelation("dRelation", DS.Tables["DtGroup"].Columns["ColumnName"], DS.Tables["DT"].Columns["ColumnName"]); DS.Relations.Add(dRelation); DtGroup.Columns.Add("ColumnSum").Expression = "sum(child(dRelation).ColumnValue)"; string decSum = DT.Compute("sum(ColumnValue)", "").ToString(); NameMaxLength.Add("总合计:".Length); ValueMaxLength.Add(decSum.Length); DtGroup.AcceptChanges(); string Tall = ""; NameMaxLength.Sort(); ValueMaxLength.Sort(); int NameMaxLen = 0; NameMaxLen = int.Parse(NameMaxLength[NameMaxLength.Count - 1].ToString()); int ValueMaxLen = 0; ValueMaxLen = int.Parse(ValueMaxLength[ValueMaxLength.Count - 1].ToString()); for (int i = 0; i < DtGroup.Rows.Count; i++) { string strOneLine = ""; strOneLine = (DtGroup.Rows[i]["ColumnName"].ToString() + ":").PadRight(NameMaxLen + 1, ' '); strOneLine = strOneLine + DtGroup.Rows[i]["ColumnSum"].ToString().PadLeft(ValueMaxLen, ' '); Tall = Tall + strOneLine + System.Environment.NewLine; } Tall = Tall + "总合计:".PadRight(NameMaxLen + 1, ' ') + decSum.PadLeft(ValueMaxLen, ' '); myDataGridView.ShowCellToolTips = false; TooLar.ToolTipIcon = ToolTipIcon.Info; TooLar.IsBalloon = true;//汽球形状 TooLar.ToolTipTitle = "鼠标选定合计信息:"; TooLar.UseAnimation = true;//使用动画效果 TooLar.UseFading = true;//淡入淡出效果 TooLar.BackColor = Color.Wheat;//工具提示的背景色 TooLar.AutoPopDelay = 10000;//显示时间 TooLar.RemoveAll(); TooLar.SetToolTip(myDataGridView, Tall); DT.Dispose(); DtGroup.Dispose(); DS.Dispose(); GC.Collect(); return true; }