zoukankan      html  css  js  c++  java
  • MyControl 常用操作

    public static class MyControl
        {
            public static class DateTimePicker
            {
                public static void DateTimePickerMaxDate(params WinControl.DateTimePicker[] dtps)
                {
                    foreach (WinControl.DateTimePicker var in dtps)
                    {
                        var.MaxDate = Convert.ToDateTime(UserInfo.LOGIN_TIME);
                    }
                }
                public static void DateTimePickerInitText(params WinControl.DateTimePicker[] dtps)
                {
                    foreach (WinControl.DateTimePicker var in dtps)
                    {
                        var.MaxDate = Convert.ToDateTime(UserInfo.LOGIN_TIME);
                        var.CustomFormat = "yyyy-MM-dd";
                        var.Format = WinControl.DateTimePickerFormat.Custom;
                        var.Text = UserInfo.LOGIN_TIME;
                    }
                }
                /// <summary>
                /// 剪掉一定天数
                /// </summary>
                /// <param name="subdays">剪掉的天数</param>
                /// <param name="dtps"></param>
                public static void DateTimePickerInitText(int subdays, params WinControl.DateTimePicker[] dtps)
                {
                    foreach (WinControl.DateTimePicker var in dtps)
                    {
                        var.MaxDate = Convert.ToDateTime(UserInfo.LOGIN_TIME);
                        var.CustomFormat = "yyyy-MM-dd";
                        var.Format = WinControl.DateTimePickerFormat.Custom;
                        var.Text = Convert.ToDateTime(UserInfo.LOGIN_TIME).AddDays((double)subdays).ToString("yyyy-MM-dd"); ;
                    }
                }
    
                /// <summary>
                /// 如果日期控件使用时的日期大于登陆是设置的日期,旧将控件选中的最大日期为登陆
                /// </summary>
                /// <param name="sender">必须为日期控件类型</param>
                /// <param name="e">可以是空,方法中没有使用到</param>
                /// <returns></returns>
                public static bool DateTimePickerCloseUp(object sender, System.EventArgs e)
                {
                    WinControl.DateTimePicker dtp = sender as WinControl.DateTimePicker;
                    if (dtp != null)
                    {
                        if (dtp.Format != WinControl.DateTimePickerFormat.Custom || dtp.CustomFormat != "yyyy-MM-dd")
                        {
                            dtp.Format = WinControl.DateTimePickerFormat.Custom;
                            dtp.CustomFormat = "yyyy-MM-dd";
                        }
                        if (Convert.ToDateTime(dtp.Text) > Convert.ToDateTime(UserInfo.LOGIN_TIME))
                        {
                            dtp.Text = UserInfo.LOGIN_TIME;
                        }
                        return true;
                    }
                    return false;
                }
            }
            public static class TextBox
            {
                /// <summary>
                /// 验证文本框内的输入内容为大于零的数字
                /// :要求文本框的Tag为文本框所代表的意思
                /// </summary>
                /// <param name="textBoxs"></param>
                /// <returns></returns>
                public static bool TextBoxPriceCheck(params WinControl.TextBox[] textBoxs)
                {
                    foreach (WinControl.TextBox textBox in textBoxs)
                    {
                        try
                        {
                            if (textBox.Text == null || textBox.Text.ToString().Trim() == "")
                            {
                                textBox.Text = "0";
                                continue;
                            }
                            else if (float.Parse(textBox.Text.ToString().Trim()) < 0)
                            {
                                throw new Exception();
                            }
                        }
                        catch
                        {
                            sMessageBox.Show((textBox.Tag ?? "光标所在文本框") + "只能输入大于零的数字。");
                            textBox.Text = "";
                            textBox.Focus();
                            return false;
                        }
                    }
                    return true;
                }
                /// <summary>
                /// 验证容器控件中的文本框是否都是数字
                /// </summary>
                /// <param name="ctr"></param>
                /// <returns></returns>
                public static bool CheckPriceTextBoxOfContainer(params Control[] ctr)
                {
                    foreach (Control var in ctr)
                    {
                        if (var.HasChildren)
                        {
                            foreach (Control var2 in var.Controls)
                            {
                                if (!CheckPriceTextBoxOfContainer(var2))
                                {
                                    return false;
                                }
                            }
                        }
                        if (var.GetType().Name.Equals("TextBox"))
                        {
                            WinControl.TextBox tb = var as WinControl.TextBox;
                            if (tb.ReadOnly == false && !MyControl.TextBox.TextBoxPriceCheck(tb))
                            {
                                return false;
                            }
                        }
                    }
                    return true;
                }
                /// <summary>
                /// 设置文本框是否为只读
                /// </summary>
                /// <param name="true">true是或false否</param>
                /// <param name="txtBoxs"></param>
                /// <returns></returns>
                public static bool ReadOnly(bool @true, params WinControl.TextBox[] txtBoxs)
                {
                    foreach (WinControl.TextBox var in txtBoxs)
                    {
                        var.Enabled = !@true;
                    }
                    return true;
                }
                /// <summary>
                /// 清空TextBox属性Text
                /// </summary>
                /// <param name="txtBoxs"></param>
                /// <returns></returns>
                public static void Clear(params WinControl.TextBox[] txtBoxs)
                {
                    ResetText("", txtBoxs);
                }
                /// <summary>
                /// 将TextBox属性Text设置成默认值
                /// </summary>
                /// <param name="default"></param>
                /// <param name="txtBoxs"></param>
                /// <returns></returns>
                public static void ResetText(string @default, params WinControl.TextBox[] txtBoxs)
                {
                    foreach (WinControl.TextBox var in txtBoxs)
                    {
                        var.Text = @default;
                    }
                }
            }
            public static class ComboBox
            {
                /// <summary>
                /// 设置列表框是否为只读
                /// </summary>
                /// <param name="true">true是或false否</param>
                /// <param name="comBoxs"></param>
                /// <returns></returns>
                public static bool ReadOnly(bool @true, params WinControl.ComboBox[] comBoxs)
                {
                    foreach (WinControl.ComboBox var in comBoxs)
                    {
                        var.Enabled = !@true;
                    }
                    return true;
                }
            }
            public static class Text
            {
                /// <summary>
                /// 将文本转换成Double
                /// </summary>
                /// <param name="text"></param>
                /// <returns></returns>
                //public static double TextToNumber(string text)
                //{
                //    try
                //    {
                //        return double.Parse(text.Trim());
                //    }
                //    catch
                //    {
                //        return 0;
                //    }
    
                //}
                /// <summary>
                /// 文本或取对象的Text属性转换为double
                /// </summary>
                /// <param name="obj">文本或控件(取控件的Text中的文本)</param>
                /// <returns></returns>
                public static double TextToNumber(object obj)
                {
                    Control ctr = obj as Control;
                    try
                    {
                        if (ctr != null)
                        {
                            return double.Parse(ctr.Text.Trim());
                        }
                        else
                        {
                            return double.Parse(obj.ToString().Trim());
                        }
                    }
                    catch
                    {
                        return 0;
                    }
                }
            }
            public static class Clear
            {
                /// <summary>
                /// 清除控件容器或控件的Text属性
                /// </summary>
                /// <param name="control"></param>
                public static void ClearContainerControlsText(WinControl.Control control)
                {
                    for (int i = 0; i < control.Controls.Count; i++)
                    {
                        if (control.Controls[i].HasChildren)
                        {
                            //递归
                            ClearContainerControlsText(control.Controls[i]);
                        }
                        string name = control.Controls[i].GetType().Name.ToString();
                        if (name.Equals("TextBox"))
                        {
                            WinControl.TextBox tbox = (WinControl.TextBox)control.Controls[i];
                            if (tbox.ReadOnly != true)
                            {
                                tbox.Clear();
                            }
                        }
                        else if (name.Equals("ComboBox"))
                        {
                            WinControl.ComboBox com = (WinControl.ComboBox)control.Controls[i];
                            if (com.Enabled == true)
                            {
                                com.SelectedIndex = -1;
                                com.ResetText();
                            }
                        }
                        else if (name.Equals("DateTimePicker"))
                        {
                            WinControl.DateTimePicker dtp = (WinControl.DateTimePicker)control.Controls[i];
                            //dtp.Text = PublicMod.UserInfo.LOGIN_TIME;
                            dtp.Format = WinControl.DateTimePickerFormat.Custom;
                            dtp.CustomFormat = "  ";
                        }
                    }
                }
                /// <summary>
                /// 清除控件容器或控件的Text属性
                /// </summary>
                /// <param name="subControl"></param>
                /// <param name="ClearControlsOfParent">是否清除控件所在容器控件内的其他控件的Text属性</param>
                //public static void ClearContainerControlsText(WinControl.Control subControl, bool ClearControlsOfParent)
                //{
                //    if (subControl.Parent == null)
                //    {
                //        ClearContainerControlsText(subControl);
                //    }
                //    else
                //    {
                //        ClearContainerControlsText(subControl.Parent);
                //    }
                //}
                /// <summary>
                /// 清除控件容器或控件的Text属性,不清空只读或不可用的控件
                /// </summary>
                /// <param name="control"></param>
                /// <param name="exceptControlName">不进行清除的控件的Name属性</param>
                public static void ClearContainerControlsText(WinControl.Control control, params string[] exceptControlName)
                {
                    for (int i = 0; i < control.Controls.Count; i++)
                    {
                        bool flag = false;
    
                        if (control.Controls[i].HasChildren)
                        {
                            //递归
                            ClearContainerControlsText(control.Controls[i], exceptControlName);
                        }
                        string name = control.Controls[i].GetType().Name.ToString();
                        string controlName = control.Controls[i].Name.ToString();
                        foreach (string var in exceptControlName)
                        {
                            if (var == controlName)
                            {
                                flag = true;
                                break;
                            }
                        }
                        if (flag)
                        {
                            continue;
                        }
                        if (name.Equals("TextBox"))
                        {
                            WinControl.TextBox tbox = (WinControl.TextBox)control.Controls[i];
                            if (tbox.ReadOnly != true && tbox.Text.Trim() != "")
                            {
                                tbox.Clear();
                            }
                        }
                        else if (name.Equals("ComboBox"))
                        {
                            WinControl.ComboBox com = (WinControl.ComboBox)control.Controls[i];
                            if (com.Enabled == true)
                            {
                                com.SelectedIndex = -1;
                                com.Text = "";
                            }
                        }
                        else if (name.Equals("DateTimePicker"))
                        {
                            WinControl.DateTimePicker dtp = (WinControl.DateTimePicker)control.Controls[i];
                            //dtp.Text = PublicMod.UserInfo.LOGIN_TIME;
                            dtp.Format = WinControl.DateTimePickerFormat.Custom;
                            dtp.CustomFormat = "  ";
                        }
                        else if (name.Equals("CheckBox"))
                        {
                            WinControl.CheckBox cbx = (WinControl.CheckBox)control.Controls[i];
                            if (cbx.CheckState != CheckState.Unchecked)
                            {
                                cbx.CheckState = WinControl.CheckState.Unchecked;
                            }
                        }
                        else if (name.Equals("RichTextBox"))
                        {
                            WinControl.RichTextBox rtxtBox = (WinControl.RichTextBox)control.Controls[i];
                            if (rtxtBox.Text.Trim() != "")
                            {
                                rtxtBox.Clear();
                            }
                        }
                    }
                }
                /// <summary>
                /// 清除控件及子控件的Text属性
                /// </summary>
                /// <param name="c"></param>
                /// <param name="exceptControl">排除的要进行清除的控件</param>
                //public static void ClearControlsText(WinControl.Control c, params WinControl.Control[] exceptControl)
                //{
                //    foreach (WinControl.Control var in exceptControl)
                //    {
                //        if (c.Name.Equals(var.Name))
                //        {
                //            continue;
                //        }
                //        ClearControlsText(c);
                //    }
                //}
                /// <summary>
                /// 清除控件及子控件的Text属性
                /// </summary>
                /// <param name="c"></param>
                public static void ClearControlsText(WinControl.Control c)
                {
                    if (c.Controls.Count > 0)
                    {
                        foreach (WinControl.Control var in c.Controls)
                        {
                            ClearControlsText(var);
                        }
                    }
                    if (CheckControlType(c))
                    {
                        c.ResetText();
                    }
                }
                public static void ClearControlsText(params WinControl.Control[] c)
                {
                    foreach (WinControl.Control var in c)
                    {
                        ClearControlsText(var);
                    }
                }
                static bool CheckControlType(WinControl.Control c)
                {
                    string[] names = new string[] { "TextBox", "ComboBox" };//该数组可以修改
                    foreach (string var in names)
                    {
                        if (c.GetType().Name.Equals(var))
                        {
                            return true;
                        }
                        continue;
                    }
                    return false;
                }
                /// <summary>
                /// 清除控件容器或控件的Text属性,包括只读和不可用的控件
                /// </summary>
                /// <param name="control"></param>
                /// <param name="exceptControlName">不进行清除的控件的Name属性</param>
                public static void ClearContainerControlsTextAnyway(WinControl.Control control, params string[] exceptControlName)
                {
                    for (int i = 0; i < control.Controls.Count; i++)
                    {
                        bool flag = false;
    
                        if (control.Controls[i].HasChildren)
                        {
                            //递归
                            ClearContainerControlsText(control.Controls[i], exceptControlName);
                        }
                        string name = control.Controls[i].GetType().Name.ToString();
                        string controlName = control.Controls[i].Name.ToString();
                        foreach (string var in exceptControlName)
                        {
                            if (var == controlName)
                            {
                                flag = true;
                                break;
                            }
                        }
                        if (flag)
                        {
                            continue;
                        }
                        if (name.Equals("TextBox"))
                        {
                            WinControl.TextBox tbox = (WinControl.TextBox)control.Controls[i];
                            //if (tbox.ReadOnly != true)
                            //{
                            tbox.Clear();
                            //}
                        }
                        else if (name.Equals("ComboBox"))
                        {
                            WinControl.ComboBox com = (WinControl.ComboBox)control.Controls[i];
                            //if (com.Enabled == true)
                            //{
                            com.SelectedIndex = -1;
                            com.ResetText();
                            //}
                        }
                        else if (name.Equals("DateTimePicker"))
                        {
                            WinControl.DateTimePicker dtp = (WinControl.DateTimePicker)control.Controls[i];
                            //dtp.Text = PublicMod.UserInfo.LOGIN_TIME;
                            dtp.Format = WinControl.DateTimePickerFormat.Custom;
                            dtp.CustomFormat = "  ";
                        }
                        else if (name.Equals("CheckBox"))
                        {
                            WinControl.CheckBox cbx = (WinControl.CheckBox)control.Controls[i];
                            cbx.CheckState = WinControl.CheckState.Unchecked;
                        }
                        else if (name.Equals("RichTextBox"))
                        {
                            WinControl.RichTextBox rtxtBox = (WinControl.RichTextBox)control.Controls[i];
                            rtxtBox.Clear();
                        }
                    }
                }
    
            }
            public static class DataGridView
            {
                /// <summary>
                /// 用于给DataGridView中的行添加一个首列被冻结的为排序的列,排序列自动生成。
                /// 如果存在其他列可以排序,还需要在Sorted事件中调用,重新绘制序号
                /// </summary>
                /// <param name="dgv">要添加排序列的GataGridView对象</param>
                public static void SetRowIndex(WinControl.DataGridView dgv, DataTable dTable)
                {
                    dgv.AutoGenerateColumns = false;
                    dgv.DataSource = dTable;
                    if (dgv != null)
                    {
                        dgv.AllowUserToAddRows = false;
                        DataTable dt = (DataTable)dgv.DataSource;
                        if (dt != null && !dt.Columns.Contains("RowIndex"))
                        {
                            dt.Columns.Add("RowIndex", typeof(string));
                        }
                        DataGridViewColumn dgvColumn = null;
                        for (int i = 0; i < dgv.Columns.Count; i++)
                        {
                            if (dgv.Columns[i].DataPropertyName == "RowIndex")
                            {
                                if (dgv.Columns[i].Name != "RowIndex")
                                {
                                    dgv.Columns[i].Name = "RowIndex";
                                }
                            }
                            else
                            {
                                continue;
                            }
                        }
                        if (!dgv.Columns.Contains("RowIndex"))
                        {
                            dgvColumn = new DataGridViewColumn(new DataGridViewTextBoxCell());
                            dgv.Columns.Add(dgvColumn);
                        }
                        else
                        {
                            dgvColumn = dgv.Columns["RowIndex"];
                        }
                        //外观上显示的顺序为第一列//dgvColumn.Index 为真实序列号,只读;
                        dgvColumn.DisplayIndex = 0;
                        //冻结,列相对静止
                        dgvColumn.Frozen = true;
                        //dgvColumn.HeaderCell.Value = "序号";//效果似乎同Name属性相同
                        dgvColumn.Name = "RowIndex";
                        dgvColumn.HeaderText = "序号";
                        //绑定到数据源:不绑定可不行
                        if (!dgvColumn.IsDataBound)
                        {
                            dgvColumn.DataPropertyName = "RowIndex";
                        }
                        //样式
                        dgvColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                        dgvColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
                        dgvColumn.SortMode = DataGridViewColumnSortMode.NotSortable;
                        dgvColumn.ReadOnly = true;
                        dgvColumn.Visible = true;
                        //后加
                        for (int i = 0; i < dgv.Columns.Count; i++)
                        {
                            if (dgv.Columns[i].Name != dgv.Columns[i].DataPropertyName)
                            {
                                dgv.Columns[i].Name = dgv.Columns[i].DataPropertyName;
                            }
                        }
                        //不允许列排序,允许排序且没有汇总时,需要在排序事件中再调用一次该方法。
                        //允许排序且允许汇总时,汇总行将不一定在最后一行。这是一个有待遇解决的问题。
                        for (int i = 0; i < dgv.Columns.Count; i++)
                        {
                            if (dgv.Columns[i].SortMode != DataGridViewColumnSortMode.NotSortable)
                            {
                                dgv.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
                            }
                        }
                        if (dt != null)
                        {
                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                if (dt.Rows[i]["RowIndex"] != DBNull.Value && dt.Rows[i]["RowIndex"].ToString() == "合计")
                                {
                                    dt.Rows.RemoveAt(i);
                                    dt.AcceptChanges();
                                    //break;
                                }
                            }
                        }
                        //dgv.DataSource = dt;
                        //dt.AcceptChanges();
    
                        if (dgv.Rows.Count > 0)
                        {
                            for (int i = 0; i < dgv.Rows.Count; i++)
                            {
                                //获取行的索引号赋值给序号
                                //行索引号是由行的位置确定的
                                dgv.Rows[i].Cells["RowIndex"].Value = dgv.Rows[i].Index + 1;
                            }
                        }
                        else if (dt != null && dt.Rows.Count > 0)
                        {
                            object[] obj = null;
                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                obj = dt.Rows[i].ItemArray;
                                obj.SetValue((i + 1).ToString(), dt.Columns.IndexOf("RowIndex"));
                                dt.Rows[i].ItemArray = obj;
                            }
                        }
                        if (dt != null)
                        {
                            dt.AcceptChanges();
                            dgv.DataSource = dt;
                        }
                    }
                }
                /// <summary>
                /// 用于给DataGridView中的行添加一个首列被冻结的为排序的列,排序列自动生成。
                /// 如果存在其他列可以排序,还需要在Sorted事件中调用,重新绘制序号
                /// </summary>
                /// <param name="dgv">要添加排序列的GataGridView对象</param>
                public static void SetRowIndex2(WinControl.DataGridView dgv, DataTable dTable)
                {
                    dgv.AutoGenerateColumns = false;
                    dgv.DataSource = dTable;
                    if (dgv != null)
                    {
                        dgv.AllowUserToAddRows = false;
                        DataTable dt = (DataTable)dgv.DataSource;
                        if (dt != null && !dt.Columns.Contains("RowIndex"))
                        {
                            dt.Columns.Add("RowIndex", typeof(string));
                        }
                        DataGridViewColumn dgvColumn = null;
                        for (int i = 0; i < dgv.Columns.Count; i++)
                        {
                            if (dgv.Columns[i].DataPropertyName == "RowIndex")
                            {
                                if (dgv.Columns[i].Name != "RowIndex")
                                {
                                    dgv.Columns[i].Name = "RowIndex";
                                }
                            }
                            else
                            {
                                continue;
                            }
                        }
                        if (!dgv.Columns.Contains("RowIndex"))
                        {
                            dgvColumn = new DataGridViewColumn(new DataGridViewTextBoxCell());
                            dgv.Columns.Add(dgvColumn);
                        }
                        else
                        {
                            dgvColumn = dgv.Columns["RowIndex"];
                        }
                        //外观上显示的顺序为第一列//dgvColumn.Index 为真实序列号,只读;
                        dgvColumn.DisplayIndex = 0;
                        //冻结,列相对静止
                        dgvColumn.Frozen = true;
                        //dgvColumn.HeaderCell.Value = "序号";//效果似乎同Name属性相同
                        dgvColumn.Name = "RowIndex";
                        dgvColumn.HeaderText = "序号";
                        //绑定到数据源:不绑定可不行
                        if (!dgvColumn.IsDataBound)
                        {
                            dgvColumn.DataPropertyName = "RowIndex";
                        }
                        //样式
                        dgvColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                        dgvColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
                        dgvColumn.SortMode = DataGridViewColumnSortMode.NotSortable;
                        dgvColumn.ReadOnly = true;
                        dgvColumn.Visible = true;
                        //后加
                        for (int i = 0; i < dgv.Columns.Count; i++)
                        {
                            if (dgv.Columns[i].Name != dgv.Columns[i].DataPropertyName)
                            {
                                dgv.Columns[i].Name = dgv.Columns[i].DataPropertyName;
                            }
                        }
                        //不允许列排序,允许排序且没有汇总时,需要在排序事件中再调用一次该方法。
                        //允许排序且允许汇总时,汇总行将不一定在最后一行。这是一个有待遇解决的问题。
                        //for (int i = 0; i < dgv.Columns.Count; i++)
                        //{
                        //    if (dgv.Columns[i].SortMode != DataGridViewColumnSortMode.NotSortable)
                        //    {
                        //        dgv.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
                        //    }
                        //}
                        if (dt != null)
                        {
                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                if (dt.Rows[i]["RowIndex"] != DBNull.Value && dt.Rows[i]["RowIndex"].ToString() == "合计")
                                {
                                    dt.Rows.RemoveAt(i);
                                    dt.AcceptChanges();
                                    //break;
                                }
                            }
                        }
                        //dgv.DataSource = dt;
                        //dt.AcceptChanges();
    
                        if (dgv.Rows.Count > 0)
                        {
                            for (int i = 0; i < dgv.Rows.Count; i++)
                            {
                                //获取行的索引号赋值给序号
                                //行索引号是由行的位置确定的
                                dgv.Rows[i].Cells["RowIndex"].Value = dgv.Rows[i].Index + 1;
                            }
                        }
                        else if (dt != null && dt.Rows.Count > 0)
                        {
                            object[] obj = null;
                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                obj = dt.Rows[i].ItemArray;
                                obj.SetValue((i + 1).ToString(), dt.Columns.IndexOf("RowIndex"));
                                dt.Rows[i].ItemArray = obj;
                            }
                        }
                        if (dt != null)
                        {
                            dt.AcceptChanges();
                            dgv.DataSource = dt;
                        }
                    }
                }
                /// <summary>
                /// 去除订单中多条货物时的重复信息
                /// 使用顺序
                /// SetRowIndex();
                /// BindGridView();
                /// SetLastRow();
                /// </summary>
                /// <param name="dtable"></param>
                /// <param name="accordingName">清除重复记录的依据列,查询结果必须以其排序</param>
                /// <param name="dgvColunsNames">要去掉的重复行的列名称,必须包含名为"RowIndex"的项,该项是索引项,用于重设索引。</param>
                public static void BindGridView(WinControl.DataGridView dgv, string accordingName, params string[] dgvColunsNames)
                {
                    //DataTable _dt = dtable.Clone();
                    //DataTable _dt = dtable.Copy();
                    if (dgv == null || dgv.Rows.Count == 0)
                    {
                        return;
                    }
                    DataTable _dt = ((DataTable)dgv.DataSource).Copy();
    
                    dgv.DataSource = _dt;
                    //if (_dt != null)
                    //{
                    //    for (int i = 0; i < _dt.Rows.Count; i++)
                    //    {
                    //        if (_dt.Rows[i]["RowIndex"] != DBNull.Value && _dt.Rows[i]["RowIndex"].ToString() == "合计")
                    //        {
                    //            _dt.Rows.RemoveAt(i);
                    //            //dt.Rows.
                    //            _dt.AcceptChanges();
                    //            break;
                    //        }
                    //    }
                    //}
                    if (dgv.Rows.Count > 0)
                    {
                        //去除订单中多条货物时的重复信息
    
                        string[] ColName = dgvColunsNames;
                        string[] KeyColName ={ accordingName };
                        long RowNum = 1;
    
                        //装入第一行
                        DataGridViewRow tmpRow = dgv.Rows[0];
                        Boolean SameFlag = true;
    
                        //逐行检查
                        for (int i = 1; i < dgv.Rows.Count; i++)
                        {
                            //KEY列一致的,则去掉重复信息,默认为一致
                            SameFlag = true;
                            for (int j = 0; j < KeyColName.Length; j++)
                            {
                                if (dgv.Rows[i].Cells[KeyColName[j]].Value.ToString() != tmpRow.Cells[KeyColName[j]].Value.ToString())
                                {
                                    SameFlag = false;
                                    break;
                                }
                            }
    
                            if (SameFlag)
                            {
                                //如果一致,去掉重复信息
                                for (int j = 0; j < ColName.Length; j++)
                                {
                                    if (ColName[j] != "")
                                    {
                                        dgv.Rows[i].Cells[ColName[j]].Value = DBNull.Value;
                                    }
                                }
                            }
                            else
                            {
                                //如果不一致重新保存比较行
                                RowNum = RowNum + 1;
                                tmpRow = dgv.Rows[i];
                                tmpRow.Cells["RowIndex"].Value = RowNum;
                            }
                        }
                    }
                }
                /// <summary>
                /// 生成DataGridView汇总行,不适用于允许列排序
                /// 必须搭配SetRowIndex()方法使用
                /// </summary>
                /// <param name="dgv"></param>
                /// <param name="dgvColunsNames"></param>
                public static void SetLastRow(WinControl.DataGridView dgv, params string[] dgvColunsNames)
                {
                    //不允许添加新行
                    if (dgv.AllowUserToAddRows == true)
                    {
                        dgv.AllowUserToAddRows = false;
                    }
                    if (dgv != null && dgv.Rows.Count > 0)
                    {
                        //不允许列排序,允许排序且没有汇总时,需要在排序事件中再调用一次该方法。
                        //允许排序且允许汇总时,汇总行将不一定在最后一行。这是一个有待遇解决的问题。
                        for (int i = 0; i < dgv.Columns.Count; i++)
                        {
                            if (dgv.Columns[i].SortMode != DataGridViewColumnSortMode.NotSortable)
                            {
                                dgv.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
                            }
                        }
                        DataTable dt = (DataTable)dgv.DataSource;
                        //dgv.DataSource = dt;
                        DataRow dr = dt.NewRow();
                        try
                        {
                            foreach (string var in dgvColunsNames)
                            {
                                double obj = 0.0D;
                                for (int i = 0; i < dgv.Rows.Count; i++)
                                {
                                    obj += double.Parse(dgv.Rows[i].Cells[var].Value == DBNull.Value ? "0" : (dgv.Rows[i].Cells[var].Value.ToString().Trim() == "" ? "0" : dgv.Rows[i].Cells[var].Value.ToString().Trim()));
                                }
                                //if (var.Substring(var.Length - 1, 1) == "1")
                                //{
                                //    dr[var.Substring(0, var.Length - 1)] = obj.ToString();
                                //}
                                //else
                                //{
                                dr[var] = obj.ToString();
                                //}
    
                            }
                        }
                        catch (Exception ex)
                        {
                            sMessageBox.Show(ex.Message);
                        }
                        dr["RowIndex"] = "合计";
                        dt.Rows.Add(dr);
                        //dgv.Rows.in
                        dt.AcceptChanges();
                    }
                }
                /// <summary>
                /// 设置DataGridView的绑定数据字段名(DataPropertyName)赋值给列名(Name)
                /// </summary>
                /// <param name="dgv"></param>
                public static void SetColumnsNameEqulsDataPropertyName(params WinControl.DataGridView[] dgv)
                {
                    foreach (WinControl.DataGridView d in dgv)
                    {
                        //d.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
                        d.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.NotSet;
                        for (int i = 0; i < d.Columns.Count; i++)
                        {
                            if (d.Columns[i].Name != d.Columns[i].DataPropertyName)
                            {
                                d.Columns[i].Name = d.Columns[i].DataPropertyName;
                                d.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
                                if (d.Columns[i].HeaderText.ToString() == "序号")
                                {
                                    d.Columns[i].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                                }
                            }
                            //d.Columns[i].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
                        }
                    }
                }
                public static void SetRowIndexAndLastRow(System.Windows.Forms.DataGridView dgv, ref DataTable dTable, params string[] dgvColumnsNames)
                {
                    dgv.AutoGenerateColumns = false;
                    //dgv.DataSource = dTable;
                    if (dgv != null)
                    {
                        dgv.AllowUserToAddRows = false;
                        //DataTable dt = (DataTable)dgv.DataSource;
                        if (dTable != null && !dTable.Columns.Contains("RowIndex"))
                        {
                            dTable.Columns.Add("RowIndex", typeof(string));
                        }
                        dgv.DataSource = dTable;
                        DataGridViewColumn dgvColumn = null;
                        for (int i = 0; i < dgv.Columns.Count; i++)
                        {
                            if (dgv.Columns[i].DataPropertyName == "RowIndex")
                            {
                                if (dgv.Columns[i].Name != "RowIndex")
                                {
                                    dgv.Columns[i].Name = "RowIndex";
                                }
                            }
                            else
                            {
                                continue;
                            }
                        }
                        if (!dgv.Columns.Contains("RowIndex"))
                        {
                            dgvColumn = new DataGridViewColumn(new DataGridViewTextBoxCell());
                            dgv.Columns.Add(dgvColumn);
                        }
                        else
                        {
                            dgvColumn = dgv.Columns["RowIndex"];
                        }
                        //外观上显示的顺序为第一列//dgvColumn.Index 为真实序列号,只读;
                        dgvColumn.DisplayIndex = 0;
                        //冻结,列相对静止
                        dgvColumn.Frozen = true;
                        //dgvColumn.HeaderCell.Value = "序号";//效果似乎同Name属性相同
                        dgvColumn.Name = "RowIndex";
                        dgvColumn.HeaderText = "序号";
                        //绑定到数据源:不绑定可不行
                        if (!dgvColumn.IsDataBound)
                        {
                            dgvColumn.DataPropertyName = "RowIndex";
                        }
                        //样式
                        dgvColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                        dgvColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
                        dgvColumn.SortMode = DataGridViewColumnSortMode.NotSortable;
                        dgvColumn.ReadOnly = true;
                        dgvColumn.Visible = true;
                        //后加
                        for (int i = 0; i < dgv.Columns.Count; i++)
                        {
                            if (dgv.Columns[i].Name != dgv.Columns[i].DataPropertyName)
                            {
                                dgv.Columns[i].Name = dgv.Columns[i].DataPropertyName;
                            }
                            //不允许列排序,允许排序且没有汇总时,需要在排序事件中再调用一次该方法。
                            //允许排序且允许汇总时,汇总行将不一定在最后一行。这是一个有待遇解决的问题。
                            if (dgv.Columns[i].SortMode != DataGridViewColumnSortMode.NotSortable)
                            {
                                dgv.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
                            }
                        }
    
    
    
                        if (dTable != null)
                        {
                            for (int i = 0; i < dTable.Rows.Count; i++)
                            {
                                if (dTable.Rows[i]["RowIndex"] != DBNull.Value && dTable.Rows[i]["RowIndex"].ToString() == "合计")
                                {
                                    dTable.Rows.RemoveAt(i);
                                    dTable.AcceptChanges();
                                    //break;
                                }
                            }
                        }
                        //    //dgv.DataSource = dt;
                        //    //dt.AcceptChanges();
    
                        if (dgv.Rows.Count > 0)
                        {
                            for (int i = 0; i < dgv.Rows.Count; i++)
                            {
                                //获取行的索引号赋值给序号
                                //行索引号是由行的位置确定的
                                dgv.Rows[i].Cells["RowIndex"].Value = dgv.Rows[i].Index + 1;
                            }
                        }
                        else if (dTable != null && dTable.Rows.Count > 0)
                        {
                            object[] obj = null;
                            for (int i = 0; i < dTable.Rows.Count; i++)
                            {
                                obj = dTable.Rows[i].ItemArray;
                                obj.SetValue((i + 1).ToString(), dTable.Columns.IndexOf("RowIndex"));
                                dTable.Rows[i].ItemArray = obj;
                            }
                        }
                        if (dTable != null)
                        {
                            dTable.AcceptChanges();
                            //dgv.DataSource = dt;
                        }
                    }
                    ////不允许添加新行
                    //if (dgv.AllowUserToAddRows == true)
                    //{
                    //    dgv.AllowUserToAddRows = false;
                    //}
                    if (dgv != null && dgv.Rows.Count > 0)
                    {
                        ////不允许列排序,允许排序且没有汇总时,需要在排序事件中再调用一次该方法。
                        ////允许排序且允许汇总时,汇总行将不一定在最后一行。这是一个有待遇解决的问题。
                        //for (int i = 0; i < dgv.Columns.Count; i++)
                        //{
                        //    if (dgv.Columns[i].SortMode != DataGridViewColumnSortMode.NotSortable)
                        //    {
                        //        dgv.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
                        //    }
                        //}
                        //DataTable dt = (DataTable)dgv.DataSource;
                        //dgv.DataSource = dt;
                        if (dgvColumnsNames.Length > 0)
                        {
    
    
                            DataRow dr = dTable.NewRow();
                            try
                            {
                                foreach (string var in dgvColumnsNames)
                                {
                                    double obj = 0.0D;
                                    for (int i = 0; i < dgv.Rows.Count; i++)
                                    {
                                        obj += double.Parse(dgv.Rows[i].Cells[var].Value == DBNull.Value ? "0" : dgv.Rows[i].Cells[var].Value.ToString().Trim());
                                    }
                                    if (var.Substring(var.Length - 1, 1) == "1")
                                    {
                                        dr[var.Substring(0, var.Length - 1)] = obj.ToString();
                                    }
                                    else
                                    {
                                        dr[var] = obj.ToString();
                                    }
    
                                }
                            }
                            catch (Exception ex)
                            {
                                sMessageBox.Show(ex.Message);
                            }
                            dr["RowIndex"] = "合计";
                            dTable.Rows.Add(dr);
                        }
                        //dgv.Rows.in
                        dTable.AcceptChanges();
                    }
                }
            }
            public static class UnEnableControls
            {
                public static void UnEnableControl(WinControl.Control ctr)
                {
                    foreach (WinControl.Control var in ctr.Controls)
                    {
                        var.Enabled = false;
                    }
                }
                public static void UnEnableControl(params WinControl.Control[] ctr)
                {
                    foreach (WinControl.Control var in ctr)
                    {
                        foreach (WinControl.Control var2 in var.Controls)
                        {
                            var2.Enabled = false;
                        }
                        var.Enabled = false;
                    }
                }
                public static void UnEnableControl(bool flag, params WinControl.Control[] ctr)
                {
                    foreach (WinControl.Control var in ctr)
                    {
                        foreach (WinControl.Control var2 in var.Controls)
                        {
                            var2.Enabled = flag;
                        }
                        var.Enabled = flag;
                    }
                }
            }
            public static class Button
            {
                /// <summary>
                /// 是否禁用
                /// </summary>
                /// <param name="flag">true可用,false禁用</param>
                /// <param name="btn"></param>
                public static void Enable(bool flag, params WinControl.Button[] btn)
                {
                    foreach (WinControl.Button var in btn)
                    {
                        var.Enabled = flag;
                    }
                }
                /// <summary>
                /// 禁用
                /// </summary>
                /// <param name="btn"></param>
                public static void Enable(params WinControl.Button[] btn)
                {
                    Enable(false, btn);
                }
            }
            /// <summary>
            /// 禁用
            /// </summary>
            /// <param name="ctl"></param>
            public static void Enable(params WinControl.Control[] ctl)
            {
                Enable(false, ctl);
            }
            /// <summary>
            /// 是否禁用
            /// </summary>
            /// <param name="flag">true可用,false禁用</param>
            /// <param name="ctl"></param>
            public static void Enable(bool flag, params WinControl.Control[] ctl)
            {
                foreach (WinControl.Control var in ctl)
                {
                    var.Enabled = flag;
                }
            }
            /// <summary>
            /// 设置与控件关联的文本属性
            /// </summary>
            /// <param name="default">属性值</param>
            /// <param name="ctl"></param>
            public static void ResetText(string @default, params WinControl.Control[] ctl)
            {
                foreach (WinControl.Control var in ctl)
                {
                    var.Text = @default;
                }
            }
            /// <summary>
            /// 设置与控件关联的文本属性为空串
            /// </summary>
            /// <param name="ctl"></param>
            public static void ResetText(params WinControl.Control[] ctl)
            {
                ResetText("", ctl);
            }
            /// <summary>
            /// 将控件的只读属性进行设置
            /// </summary>
            /// <param name="ctl"></param>
            public static void Readonly(params WinControl.Control[] ctl)
            {
                Readonly(true, ctl);
            }
            /// <summary>
            /// 将控件的只读属性进行设置
            /// </summary>
            /// <param name="bool"></param>
            /// <param name="ctl"></param>
            public static void Readonly(bool @bool, params WinControl.Control[] ctl)
            {
                foreach (WinControl.Control var in ctl)
                {
                    TextBoxBase tbb = var as TextBoxBase;
                    if (tbb != null)
                    {
                        tbb.ReadOnly = @bool;
                    }
                }
            }
        }
  • 相关阅读:
    Android 序列化 反序列功能
    Android两个应用之间共享数据之SharedPrefence
    利用Asp.Net的Identity控制登录权限
    基元类型
    CLR概述
    python中的函数-基础
    较为复杂的sql
    oracle中的替换字段字符串的方法
    使用Sql查看表对应的外键关系。
    js中的除法
  • 原文地址:https://www.cnblogs.com/goto/p/2443352.html
Copyright © 2011-2022 走看看