创建子窗体页面,创建委托事件
public partial class ColumnSetForm : Form
{
public IList<ColumnSet> columnSet;//传来的列设置数组
//委托
public delegate void DoActionForEdit(IList<ColumnSet> columnSet);
public DoActionForEdit RefreshForEdit;
public ColumnSetForm()
{
InitializeComponent();
this.dgvColSet.AutoGenerateColumns = false;
}
private void ColumnSetForm_Load(object sender, EventArgs e)
{
dgvColSet.DataSource = columnSet;
}
private void buttonSave_Click(object sender, EventArgs e)
{
this.RefreshForEdit(columnSet);
this.Close();
}
private void buttonCancle_Click(object sender, EventArgs e)
{
this.Close();
}
//列上移
private void buttonup_Click(object sender, EventArgs e)
{
if (dgvColSet.SelectedRows.Count > 0 && dgvColSet.SelectedRows[0].Index > -1)
{
int rowindex=dgvColSet.SelectedRows[0].Index;
var targetset = columnSet.First(p => p.ColumnSetName == dgvColSet.SelectedRows[0].Cells["ColumnSetName"].Value.ToString());
if (targetset.ColumnSetIndex > 1)
{
var changeset = columnSet.First(p => p.ColumnSetIndex == targetset.ColumnSetIndex - 1);
targetset.ColumnSetIndex--;
changeset.ColumnSetIndex++;
dgvColSet.DataSource = columnSet.OrderByDescending(p => p.ColumnSetIndex).Reverse().ToList();
dgvColSet.Rows[rowindex-1].Selected = true;
}
}
}
//列下移
private void buttondown_Click(object sender, EventArgs e)
{
if (dgvColSet.SelectedRows.Count > 0 && dgvColSet.SelectedRows[0].Index > -1 && dgvColSet.SelectedRows[0].Index < dgvColSet.Rows.Count-1)
{
int rowindex = dgvColSet.SelectedRows[0].Index;
var targetset = columnSet.First(p => p.ColumnSetName == dgvColSet.SelectedRows[0].Cells["ColumnSetName"].Value.ToString());
if (targetset.ColumnSetIndex > 1)
{
var changeset = columnSet.First(p => p.ColumnSetIndex == targetset.ColumnSetIndex + 1);
targetset.ColumnSetIndex++;
changeset.ColumnSetIndex--;
dgvColSet.DataSource = columnSet.OrderByDescending(p => p.ColumnSetIndex).Reverse().ToList();
dgvColSet.Rows[rowindex +1].Selected = true;
}
}
}
private void dgvColSet_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
ShowSequence.showDataGridViewSequence(dgvColSet,e);
}
}
父窗体中加载子窗体
private void tmPlanQuery_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
ColumnSetForm frm1 = new ColumnSetForm();
IList<ColumnSet> ColumnSets = new List<ColumnSet>();
foreach (DataGridViewColumn column in this.dataGridView.Columns)
{
ColumnSet columnSet = new ColumnSet();
columnSet.ColumnSetName = column.Name;
columnSet.ColumnSetIndex = column.DisplayIndex;
columnSet.ColumnSetVisible = column.Visible;
columnSet.ColumnSetWidth = column.Width;
columnSet.ColumnSetText = column.HeaderText;
ColumnSets.Add(columnSet);
}
ColumnSets = ColumnSets.OrderByDescending(p => p.ColumnSetIndex).Reverse().ToList();
frm1.RefreshForEdit += this.RefreshForShow;
frm1.columnSet = ColumnSets;
frm1.ShowDialog();
this.Cursor = Cursors.Default;
}
#region 调整完以后,对界面进行刷新
public void RefreshForShow(IList<ColumnSet> columnSets)
{
foreach (DataGridViewColumn column in this.dataGridView.Columns)
{
foreach (ColumnSet columnset in columnSets)
{
if (column.Name == columnset.ColumnSetName)
{
column.Visible = columnset.ColumnSetVisible;
column.DisplayIndex = columnset.ColumnSetIndex;
column.Width = columnset.ColumnSetWidth;
continue;
}
}
}
}
#endregion
其中dataGridview 为要实现列设置的表
子窗体为: