【问题标题】:C# - Change existing column in a datagridview to a comboboxC# - 将 datagridview 中的现有列更改为组合框
【发布时间】:2016-10-13 14:53:31
【问题描述】:

我使用 4 列(使用 DataTable)动态填充 DGV,并希望将第 2 列和第 3 列设为组合框。

数据返回值: ProjNum(1) = H-16-0001,StatusCode(2) = P,ActionCode(3) = C,ActionSeqnum(4) = 0001

对于状态代码和操作代码,我们有一个查找表: P = 待定 C = 创建

对于每一行,我希望将第 2 列和第 3 列作为组合框,并将其自身设置为返回值和文本“待定/创建”。

DataGridView1.DataSource = ClassName.GetAppData(); //Returns a datatable.

如何让 DGV 列 2 和 3 显示为组合框?

我找到了一个链接并尝试了:DataGridView set column cell Combobox

并且还找到了 CellFormatting 事件,但我似乎无法让它工作。

我为返回数据表的查找表创建了函数,但是当尝试使用上述方法绑定它时,我无法让它工作。

来自 PowerBuilder 的背景,.NET 控件和功能对我来说是新的。

感谢您的帮助。

【问题讨论】:

  • 这不是很清楚。是否要将所述列中的一个或多个单元格制作成组合框?或者您想用第 2 列和第 3 列中的内容填充表单上其他位置的两个梳状框?
  • 如何让 DGV 列 2 和 3 显示为组合框 您将它们设置为 DataGridViewComboBoxColumns
  • Skwear,我想将上述列中的单元格设置为组合框,无论 DGV 有一行还是 100 个,每一行都应显示组合框并设置为返回的任何值那一行。
  • Stuart,我们不在这里使用向导,因为它可能会更容易,所以我必须在飞行中做所有事情,不要问为什么? :)
  • Stuart,在深入查看链接后,这可能有效,将试一试。谢谢。

标签: c#


【解决方案1】:

好的,经过相当多的研究和更有经验的 C#.NET 开发人员的一些帮助,我发现了一些对我有用但很耗时的东西。

在这种情况下,您需要事先创建控件,我的 DS 返回了 12 列,这意味着 12 个新控件。我只做了下面两个作为例子,一个 DGV 文本框和一个 DGV 组合框。

private void Form1_Load(object sender, EventArgs e)
    {
        dataGridView2.AutoGenerateColumns = false;

//
//Text Box column
        DataGridViewTextBoxColumn UserIDColumn = new DataGridViewTextBoxColumn();
        UserIDColumn.Name = "user_id";
        UserIDColumn.DataPropertyName = "user_id";
        UserIDColumn.HeaderText = "User ID";
        UserIDColumn.HeaderCell.Style.Font = new Font(dataGridView2.Font, FontStyle.Bold);
        UserIDColumn.ReadOnly = false;
        dataGridView2.Columns.Add(UserIDColumn);

//Adding a combobox
        DataGridViewComboBoxColumn ActionStatusCodeColumn = new DataGridViewComboBoxColumn();
        ActionStatusCodeColumn.Name = "StatusCode";
        ActionStatusCodeColumn.DataPropertyName = "StatusCode";
        ActionStatusCodeColumn.ReadOnly = false;
        ActionStatusCodeColumn.DataSource = GetStatusLkp();//This function returns a BindingSource which contains the noted members below StatusCode and StatusCodeDescrEng.
        ActionStatusCodeColumn.ValueMember = "StatusCode";
        ActionStatusCodeColumn.DisplayMember = "StatusCodeDescrEng";
        dataGridView2.Columns.Add(ActionStatusCodeColumn);

//Attach the Data property name to the columns
dataGridView2.Columns[0].DataPropertyName = "user_id";
dataGridView2.Columns[1].DataPropertyName = "StatusCode";

//Next bind your DGV
dataGridView2.DataSource = GetActionsData(); //This function returns a BindingSource which contains the noted members user_id and StatusCode.

}

这很痛苦,但它有效。

如果有更简单的方法,请告诉我。

谢谢

【讨论】:

    猜你喜欢
    • 2015-12-08
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    相关资源
    最近更新 更多