简体   繁体   English

以编程方式隐藏DataGridView列位置0和1

[英]Hide DataGridView column position 0 & 1 programmaticly

Im trying to set column on position 0 & 1 visibility to false 我试图将位置0和1的可见性设置为false

My Code: 我的代码:

                    mainContenttabControl.TabPages.Add(myTabPage);
                    mainContenttabControl.TabPages[i].Controls.Add(new DataGridView()
                    {
                        Name = "dataGridView_" + tabTitle,
                        Dock = DockStyle.Fill,
                        DataSource = selectedSensors,
                        AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
//SET HERE COLUMN VISIBLITY = false
                    });

But i cant acces here the property .Column i also tryed to write a function after that gets called after my "setDataGridViews()" function but it only works when the Form is allready loaded 但是我不能在这里访问属性.Column,我也尝试编写一个函数,该函数在我的“ setDataGridViews()”函数之后被调用,但仅在已加载窗体时才起作用

private void hideDatalayerColumns()
        {
            int dataGridViewHardwareIndex = mainContenttabControl.TabPages[0].Controls.IndexOfKey("dataGridView_" + "Hardware");
            int dataGridViewSensorsIndex = mainContenttabControl.TabPages[1].Controls.IndexOfKey("dataGridView_" + "Sensors");
            int dataGridViewServiceIndex = mainContenttabControl.TabPages[2].Controls.IndexOfKey("dataGridView_" + "Service");
            int dataGridViewRepairIndex = mainContenttabControl.TabPages[3].Controls.IndexOfKey("dataGridView_" + "Repair");

            if (dataGridViewHardwareIndex >= 0)
            {
                DataGridView myTabGridViewHardware = mainContenttabControl.TabPages[0].Controls[dataGridViewHardwareIndex] as DataGridView;
                myTabGridViewHardware.Columns[0].Visible = false;
                myTabGridViewHardware.Columns[1].Visible = false;
            }
            if (dataGridViewSensorsIndex >= 0)
            {
                DataGridView myTabGridViewSensors = mainContenttabControl.TabPages[1].Controls[dataGridViewSensorsIndex] as DataGridView;
                myTabGridViewSensors.Columns[0].Visible = false;
                myTabGridViewSensors.Columns[1].Visible = false;
            }
            if (dataGridViewServiceIndex >= 0)
            {
                DataGridView myTabGridViewService = mainContenttabControl.TabPages[2].Controls[dataGridViewServiceIndex] as DataGridView;
                myTabGridViewService.Columns[0].Visible = false;
                myTabGridViewService.Columns[1].Visible = false;
            }
            if (dataGridViewRepairIndex >= 0)
            {
                DataGridView myTabGridViewRepair = mainContenttabControl.TabPages[3].Controls[dataGridViewRepairIndex] as DataGridView;
                myTabGridViewRepair.Columns[0].Visible = false;
                myTabGridViewRepair.Columns[1].Visible = false;
            }
        }

Is there a workaround or a better solution that my two columns is .Visible = false ? 是否有解决方法或更好的解决方案,即我的两列为.Visible = false?

The funny part is thaht it is there... 有趣的部分是它在那里...

If you want to hide the first two columns of several DGVs in a Form is what I understand, then you could use the following Linq recursive function to return your DGVs and hide the target columns: 如果您想隐藏Form中几个DGV的前两列,那么我可以使用下面的Linq递归函数返回DGV并隐藏目标列:

private IEnumerable<DataGridView> GetAllDGVs(Control container)
{
    var controls = container.Controls.Cast<Control>();
    return controls.SelectMany(c => GetAllDGVs(c))
        .Concat(controls.OfType<DataGridView>());
}

and the usage: 和用法:

private void hideDatalayerColumns()
{
    GetAllDGVs(this).ToList().ForEach(dgv =>
    {
        dgv.Columns[0].Visible = false;
        dgv.Columns[1].Visible = false;
    });
}

Good luck. 祝好运。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM