通过子窗体操作父窗体的列设置,来改变列顺序和显示问题

创建子窗体页面,创建委托事件

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 为要实现列设置的表

子窗体为:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
窗体中刷新窗体可以使用委托和事件来实现。具体步骤如下: 1. 在窗体中定义一个委托和事件: ```csharp public delegate void RefreshEventHandler(); public event RefreshEventHandler RefreshEvent; ``` 2. 在窗体中通过构造函数传递窗体对象,并在需要刷新时触发事件: ```csharp public partial class ChildForm : Form { private ParentForm parentForm; public ChildForm(ParentForm parentForm) { InitializeComponent(); this.parentForm = parentForm; } private void button1_Click(object sender, EventArgs e) { // 窗体按钮点击时触发事件 parentForm.RefreshEvent?.Invoke(); } } ``` 3. 在窗体中订阅事件,并在事件处理程序中执行刷新操作: ```csharp public partial class ParentForm : Form { public ParentForm() { InitializeComponent(); // 订阅窗体事件 childForm.RefreshEvent += RefreshData; } private void RefreshData() { // 刷新操作 // ... } } ``` 如果要在窗体改变窗体控件的值,可以通过将窗体对象传递给窗体,并在窗体中直接修改窗体控件的值。具体步骤如下: 1. 在窗体中定义一个窗体对象,并在构造函数中初始化: ```csharp public partial class ChildForm : Form { private ParentForm parentForm; public ChildForm(ParentForm parentForm) { InitializeComponent(); this.parentForm = parentForm; } private void button1_Click(object sender, EventArgs e) { // 修改窗体控件的值 parentForm.label1.Text = "新的文本内容"; } } ``` 2. 在窗体中打开窗体时将自身对象传递给窗体: ```csharp private void button1_Click(object sender, EventArgs e) { ChildForm childForm = new ChildForm(this); childForm.Show(); } ``` 这样,在窗体中就可以直接修改窗体的控件值了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值