繁体   English   中英

C#-将datagridview中的现有列更改为组合框

[英]C# - Change existing column in a datagridview to a combobox

我在运行时使用4列(使用DataTable)填充了DGV,并希望使第2列和第3列成为组合框。

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

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

对于每一行,我希望将第2列和第3列作为一个组合框,并将其自身设置为返回的值以及文本“ Pending / Create”。

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

如何获得DGV第2列和第3列显示为组合框?

我找到一个链接并尝试过: DataGridView设置列单元格组合框

并且还发现了CellFormatting事件,但我似乎无法使其正常工作。

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

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

谢谢您的帮助。

好的,经过大量研究和经验丰富的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.

}

这很痛苦,但是有效。

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

谢谢

暂无
暂无

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

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