DataGridView DataGridViewComboBox可编辑
来源:互联网 发布:手机拨打软件 编辑:程序博客网 时间:2024/04/29 13:20
datagridview 中的DataGridViewComboBoxColumn
下拉选项类型,只能像web中的DropDownList下拉,不能编辑,修改了displaystyle属性,仍然无效果。
搜索一下,得到一下结果,
http://hi.baidu.com/goga/blog/item/5bd4908f5f2685f2503d92cf.html
[C#][WinForm]DataGridView中使DataGridViewComboBox可编辑
为了适应我的需要,代码经过我的修正如下:
新建一个类文件保存起来
[C#_Code]
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.ComponentModel;
namespace Elephant.FormUtils
{
public class DataGridViewComboEditBoxColumn : DataGridViewComboBoxColumn
{
public DataGridViewComboEditBoxColumn()
{
DataGridViewComboEditBoxCell obj = new DataGridViewComboEditBoxCell();
this.CellTemplate = obj;
}
}
//要加入的类
public class DataGridViewComboEditBoxCell : DataGridViewComboBoxCell
{
public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
ComboBox comboBox = (ComboBox)base.DataGridView.EditingControl;
if (comboBox != null)
{
comboBox.DropDownStyle = ComboBoxStyle.DropDown;
comboBox.AutoCompleteMode = AutoCompleteMode.Suggest;
comboBox.Validating += new CancelEventHandler(comboBox_Validating);
}
}
protected override object GetFormattedValue(object value, int rowIndex, ref DataGridViewCellStyle cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)
{
if (value != null)
{
if (value.ToString().Trim() != string.Empty)
{
if (Items.IndexOf(value) == -1)
{
Items.Add(value);
//DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn)OwningColumn;
//col.Items.Add(value);
}
}
}
return base.GetFormattedValue(value, rowIndex, ref cellStyle, valueTypeConverter, formattedValueTypeConverter, context);
}
void comboBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
DataGridViewComboBoxEditingControl cbo = (DataGridViewComboBoxEditingControl)sender;
if (cbo.Text.Trim() == string.Empty) return;
DataGridView grid = cbo.EditingControlDataGridView;
object value = cbo.Text;
// Add value to list if not there
if (cbo.Items.IndexOf(value) == -1)
{
DataGridViewComboBoxColumn cboCol = (DataGridViewComboBoxColumn)grid.Columns[grid.CurrentCell.ColumnIndex];
// Must add to both the current combobox as well as the template, to avoid duplicate entries
cbo.Items.Add(value);
//cboCol.Items.Add(value);
grid.CurrentCell.Value = value;
}
}
}
}
[/C#_Code]
在调用页引入 using Elephant.FormUtils;
在datagridview设计页中,可以看到ColumnType多了DataGridViewComboEditBoxColumn,这正是我想要的。
因为我每行的下拉框内容都不一样,所以代码这么写:
[C#_Code]
DataGridViewComboBoxCell combox_cell = ((DataGridViewComboBoxCell)dgv_items.CurrentRow.Cells["unit"]);
//ii._unit_price是一个datatable
//combox_cell.DataSource = ii._unit_price;这样赋值,会报错!
//combox_cell.DataSource = ii._unit_price;
combox_cell.Items.Clear();
combox_cell.Items.AddRange(ii._unit_price);
combox_cell.DisplayMember = "unit";
combox_cell.Value = ii._unit_price.Rows[0]["unit"].ToString();[/C#_Code]
效果如下:
- DataGridView DataGridViewComboBox可编辑
- DataGridView中初始化DataGridViewComboBox列
- C# DataGridView combobox可编辑
- DataGridView中动态加载DataGridViewCombobox的值
- DataGridView列标题可编辑组件
- C# DataGridView combobox可编辑+自行绑定
- WinForm DataGridView 可编辑单元格拷贝
- DataGridView中ComboBoxColumn改变为可编辑的
- winform设置DataGridView某行某列单元格为可编辑状态
- C# DataGridView中实现类似ComboBox可编辑的下拉框功能
- C# DataGridView中实现类似ComboBox可编辑的下拉框功能
- c# DataGridView中实现ComboBox可编辑的下拉框功能
- .NET组件控件实例编程系列——3.DataGridView列标题可编辑组件
- datagridviewcombobox 联动
- 可编辑
- c#开发的一个在winfrom下可编辑的table控件,可代替datagridview部分功能
- dataGridView编辑模式设定
- DataGridView禁止编辑单元格
- DIV+CSS中标签ul ol li dl dt dd用法
- WinXP下USB驱动开发(五)
- quartz 在spring 中配置服务 定时执行和循环执行事件
- 主题:java排序集锦
- 医疗保险,公积金、养老、生育、工伤、失业保险
- DataGridView DataGridViewComboBox可编辑
- (夫妻随签)深圳夫妻随迁入户办理详解
- Microsoft.AlphaImageLoader滤镜讲解
- WinXP下USB驱动开发(六)
- Oracle存储过程总结(一、基本应用)
- 去掉Struts2标签fielderror中ul li 方法
- T43关于小硬盘换大硬盘系统提示出错问题
- 假如当初知道skycc营销软件是不是比现在好
- Vi技术综合整理