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;
}
}
}
}