datagridview同列不同行动态嵌套不同类型控件

这篇博客介绍如何在DataGridView中动态根据数据库标志位在“属性值”列展示TextBox或ComboBox。当用户点击单元格时,根据标志位创建相应控件,并在控件值改变时更新单元格值。实现过程中包括对CellMouseClick事件的处理,以及对TextBox和ComboBox事件的响应,以保持单元格和控件值的一致性。

当单击属性值列单元格时,会根据数据库中的标志位来判断显示textbox,还是combobox,或者其他控件。

当嵌套控件的值发生改变时,将值传给所在单元格。效果图如下:

实现过程如下:

private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            DataGridViewCell dgvc = this.dataGridView1.CurrentCell;
            RnDevObject obj = devTreeView2._SelectedDevObject;

            if (dgvc != null && dgvc.OwningColumn.Name == "属性值")
            {

             //为0则显示textbox,1显示combobox
                         if (数据库标志位==0)
                 

在C# WinForms中,可以通过设置`DataGridView`的`Columns`和`Rows`属性来实现同一列不同控件类型不同。以下是一个示例代码,展示了如何在`DataGridView`中实现这一功能: ```csharp using System; using System.Windows.Forms; public class DataGridViewExample : Form { private DataGridView dataGridView; public DataGridViewExample() { dataGridView = new DataGridView { Dock = DockStyle.Fill, ColumnCount = 2 }; dataGridView.Columns[0].Name = "ID"; dataGridView.Columns[1].Name = "Value"; // 添加行 dataGridView.Rows.Add("1", "TextBox"); dataGridView.Rows.Add("2", "ComboBox"); dataGridView.Rows.Add("3", "CheckBox"); // 设置第二列的单元格样式 dataGridView.CellFormatting += DataGridView_CellFormatting; dataGridView.CellContentClick += DataGridView_CellContentClick; this.Controls.Add(dataGridView); this.Text = "DataGridView Example"; this.Size = new System.Drawing.Size(400, 300); } private void DataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (dataGridView.Columns[e.ColumnIndex].Name == "Value" && e.RowIndex >= 0) { var cell = dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex]; var value = cell.Value?.ToString(); if (value == "TextBox") { cell.Value = ""; var textBox = new DataGridViewTextBoxCell(); textBox.Value = ""; dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex] = textBox; } else if (value == "ComboBox") { cell.Value = ""; var comboBox = new DataGridViewComboBoxCell(); comboBox.Items.AddRange(new string[] { "Option 1", "Option 2", "Option 3" }); dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex] = comboBox; } else if (value == "CheckBox") { cell.Value = false; var checkBox = new DataGridViewCheckBoxCell(); dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex] = checkBox; } } } private void DataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0 && dataGridView.Columns[e.ColumnIndex].Name == "Value") { var cell = dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex]; if (cell is DataGridViewCheckBoxCell) { var checkBoxCell = cell as DataGridViewCheckBoxCell; bool isChecked = Convert.ToBoolean(checkBoxCell.Value); MessageBox.Show("CheckBox is " + (isChecked ? "checked" : "unchecked")); } } } [STAThread] public static void Main() { Application.EnableVisualStyles(); Application.Run(new DataGridViewExample()); } } ``` 在这个示例中,我们创建了一个`DataGridView`,并设置了两列:ID和Value。根据Value列的值,我们动态设置不同控件类型TextBox、ComboBox、CheckBox)。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值