【问题标题】:How do I Detect If a DataGridViewComboBoxColumn exists如何检测是否存在 DataGridViewComboBoxColumn
【发布时间】:2013-06-17 09:24:05
【问题描述】:

我有一个 DataGridView,最后一列添加为 DataGridViewComboBoxColumn

问题是,我可以通过这样做来确定“Notes”列是否存在

if(grid.Columns.Contains("Notes")){
}

但是,如果我对 DataGridViewComboBoxColumn 的标题尝试同样的方法,它就不起作用。谁能建议一下,为什么会这样?

这是创建网格并添加 DataGridViewComboBoxColumn 的函数,底部有 Mikhail Tregubov 建议的代码来确定该列是否已经存在...它不会将其视为存在,即使此函数是之前运行,它就在那里!

private void _buildDataTable()
        {

            // create a data table object
            DataTable dataTable = new DataTable();

            // add columns
            dataTable.Columns.Add("Channel");
            dataTable.Columns.Add("Date");
            dataTable.Columns.Add("First Name");
            dataTable.Columns.Add("Last Name");
            dataTable.Columns.Add("DOB");
            dataTable.Columns.Add("NI Number");
            dataTable.Columns.Add("Notes");
            dataTable.Columns.Add("Agg. Max[%]");
            dataTable.Columns.Add("Agg. Inclination[%/min]");
            dataTable.Columns.Add("Agg. LagPhase[s]");

            // CONCENTRATION COL
            // TEST TYPE DROP DOWN COL

            // add initial rows row to data grid for 4 channels - only 4 possible
            DataRow dataRow1 = dataTable.Rows.Add();
            DataRow dataRow2 = dataTable.Rows.Add();
            DataRow dataRow3 = dataTable.Rows.Add();
            DataRow dataRow4 = dataTable.Rows.Add();

            // Add initial data to the new rows
            dataRow1[0] = "1"; // channel number
            dataRow1[1] = DateTime.Now.ToString("d/M/yyyy");
            dataRow1[7] = "0";
            dataRow1[8] = "0";
            dataRow1[9] = "0";
            dataRow2[0] = "2"; // channel number
            dataRow2[1] = DateTime.Now.ToString("d/M/yyyy");
            dataRow2[7] = "0";
            dataRow2[8] = "0";
            dataRow2[9] = "0";
            dataRow3[0] = "3"; // channel number
            dataRow3[1] = DateTime.Now.ToString("d/M/yyyy");
            dataRow3[7] = "0";
            dataRow3[8] = "0";
            dataRow3[9] = "0";
            dataRow4[0] = "4"; // channel number
            dataRow4[1] = DateTime.Now.ToString("d/M/yyyy");
            dataRow4[7] = "0";
            dataRow4[8] = "0";
            dataRow4[9] = "0";

            // Add drop downs to the table for test type
            DataGridViewComboBoxColumn testTypeCol = new DataGridViewComboBoxColumn();

            // create a new datatable for the test type
            DataTable dataTable2 = new DataTable();

            // Add the column
            dataTable2.Columns.Add(new DataColumn("Value", typeof(string)));

            // Add drop down rows
            dataTable2.Rows.Add("A23187");
            dataTable2.Rows.Add("ADP");
            dataTable2.Rows.Add("Arachidonic Acid");
            dataTable2.Rows.Add("Collagen");
            dataTable2.Rows.Add("CRP");
            dataTable2.Rows.Add("Epinephrine");
            dataTable2.Rows.Add("PMA");
            dataTable2.Rows.Add("Ristocetin");
            dataTable2.Rows.Add("TRAP6");
            dataTable2.Rows.Add("U46619");
            dataTable2.Rows.Add("γ-Thrombin");

            // set the columns data source
            testTypeCol.DataSource = dataTable2;

            // set properties
            testTypeCol.ValueMember = "Value";
            testTypeCol.HeaderText = "Aggregation Test Type";

            // set the data in the gridview
            this._dataGrid.DataSource = dataTable;

            if (this._dataGrid.Columns.Contains("Aggregation Test Type") && this._dataGrid.Columns["Aggregation Test Type"].GetType() == typeof(DataGridViewComboBoxColumn))
            {
                MessageBox.Show("ALREADY");
            }
            else
            {
                // add column to the datagridview
                this._dataGrid.Columns.Add(testTypeCol);
            }

        }

【问题讨论】:

    标签: c# datagridview


    【解决方案1】:

    如果您的问题是如何确定列类型是否为 DataGridViewComboBoxColumn,请尝试使用 typeof。 例如:

            if(grid.Columns.Contains("Notes") && grid.Columns["Notes"].GetType() == typeof(DataGridViewComboBoxColumn))
            {
                //do something
            }
    

    如果您的问题是,Contains 方法在添加到 grid.Columns 集合的 DataGridViewComboBoxColumn 时无法正常工作,那么请添加更多代码,例如如何创建 DataGridViewComboBoxColumn 的新实例并将其添加到网格中。

    【讨论】:

    • 如果您稍后尝试在网格中的代码中找到 testTypeCol,那么我看不到您在哪里设置 Name 属性。初始化 testTypeCol 后尝试设置 testTypeCol.Name = "Aggregation Test Type"
    • 好的,已经出现了警报。但是现在奇怪的是,当再次调用该函数时,它将该列放在开头而不是结尾
    • 我想我知道它为什么要这么做
    • 如果您的意思是调用 _buildDataTable() 在集合末尾添加 testTypeCol,我认为这不是发生的情况 - 您只需重新绑定除 testTypeCol 之外的所有列(已添加到网格中) ,所以它现在成为第一列,最后重新添加了 dataTable 源中的其他列。
    猜你喜欢
    • 2019-09-28
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2010-10-30
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多