【问题标题】:Adding a comboBoxcolumn to datatable in winforms在winforms的数据表中添加一个comboBoxcolumn
【发布时间】:2015-04-21 18:30:19
【问题描述】:

问题 如何将 comboBoxcolumn 添加到 dataTable 而不仅仅是网格?我尝试将“连接器名称”列设置为 comboboxcolumn ,但显然我做得不对。

我有什么(sn-p):

  if (_DtMain.Columns.Count == 0)
            {

                var cols = new List<DataColumn>();
                cols.Add(new DataColumn("PocketName", typeof(string)));
                cols.Add(new DataColumn("KeyIndex", typeof(string)));
                cols.Add(new DataColumn("SortOrder", typeof(int)));
                cols.Add(new DataColumn("ConnectorName", typeof(DataGridViewComboBoxColumn )));
                _DtMain.Columns.AddRange(cols.ToArray());
                dataGridView1.DataSource = _DtMain.DefaultView;

            }

编辑

这是我的新解决方案:

    if (_DtMain.Columns.Count == 0)
    {
        var colPN = new DataGridViewTextBoxColumn();
        var colCN = new DataGridViewComboBoxColumn();
        var colKI = new DataGridViewTextBoxColumn();
        var colSO = new DataGridViewTextBoxColumn();

        dgvHeaderEdit.Columns.Add(colPN);
        dgvHeaderEdit.Columns.Add(colCN);
        dgvHeaderEdit.Columns.Add(colKI);
        dgvHeaderEdit.Columns.Add(colSO);

        colPN.HeaderText = "Pocket Name";
        colPN.DataPropertyName = "Pocket Name";

        colCN.HeaderText = "Connector Name";
        colCN.DataPropertyName = "Connector Name";

        colKI.HeaderText = "Key Index";
        colKI.DataPropertyName = "Key Index";

        colSO.HeaderText = "Sort Order";
        colSO.DataPropertyName = "Sort Order";

        _DtMain.Columns.Add(new DataColumn("Pocket Name", typeof(string)));
        _DtMain.Columns.Add(new DataColumn("Connector Name", typeof(string)));
        _DtMain.Columns.Add(new DataColumn("Key Index", typeof(string)));
        _DtMain.Columns.Add(new DataColumn("Sort Order", typeof(int)));


 dgvHeaderEdit.AutoGenerateColumns = false;
                dgvHeaderEdit.DataSource = _DtMain.DefaultView;

【问题讨论】:

  • 为什么要将ComboBox 添加到DataTable?尝试使用Collection 对象
  • col.Columns.Add(new DataColumn("SomeCollection", typeof(List&lt;string&gt;)));
  • @MethodMan 该列不显示使用 cols.Add(new DataColumn("ConnectorName", typeof(List)));
  • 这是做我想做的事的一种工作方式。我只是以编程方式为数据表和网格制作了列并添加了它们。

标签: c# winforms datagridview datatable


【解决方案1】:

这样使用它: 为 Grid 的 DataSource 构建 dataTable 时:

 DataTable dt = new DataTable();
            dt.Columns.Add("PocketName", typeof(string));
            dt.Columns.Add("KeyIndex", typeof(string));
            dt.Columns.Add("SortOrder", typeof(int));
            dt.Columns.Add("ConnectorName", typeof(int));

            dgv.DataSource = dt;

现在为 GridView 创建一个 ComboBox 列,并为此 ComboBox 创建一个数据源。 添加所有值以显示在 dtConnectorSource 的 ComboBox 中 用 ComboBox 中所需的值填充 dtConnectorSource。

DataTable dtConnectorSource = new DataTable();

dtConnectorSource.Columns.Add("ConnectorName", typeof(int));
dtConnectorSource.Columns.Add("ConnectorNameDisplay", typeof(String));

    DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn ();
    cmb.DataSource = dtConnectorSource;
    cmb.DisplayMember = "ConnectorNameDisplay";
    cmb.ValueMember = "ConnectorName";

    cmb.DataPropertyName = "ConnectorName";

    dgv.Columns.Add(cmb);

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    相关资源
    最近更新 更多