簡體   English   中英

以編程方式隱藏DataGridView列位置0和1

[英]Hide DataGridView column position 0 & 1 programmaticly

我試圖將位置0和1的可見性設置為false

我的代碼:

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

但是我不能在這里訪問屬性.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;
            }
        }

是否有解決方法或更好的解決方案,即我的兩列為.Visible = false?

有趣的部分是它在那里...

如果您想隱藏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>());
}

和用法:

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

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM