DataGridView中的DataGridViewComboBoxColumn列如何让其可编辑也可下拉选择。

hhh715 2008-03-15 02:41:09
DataGridView中的DataGridViewComboBoxColumn列如何让其可编辑也可下拉选择。
请高手指点下
看了重写类的代码,但是不知道怎么用?谢谢
...全文
1233 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
天地英豪 2010-07-17
  • 打赏
  • 举报
回复
自己总结了一下:datagridviewcomboboxcolumn可选可编辑的三种方法
http://download.csdn.net/source/1035373
zhanfu 2009-09-30
  • 打赏
  • 举报
回复
谢谢高手分享,我也在为此问题烦恼~!
天地英豪 2009-02-21
  • 打赏
  • 举报
回复
谢谢高手分享,顶一个!
lelliao 2008-04-18
  • 打赏
  • 举报
回复
顶楼上一个,谢谢了.试试先.
九章落地 2008-03-17
  • 打赏
  • 举报
回复
你把下面的代码,拷去调试一下,会产生一列名为ComboBoxEx的下拉框列,可以编辑内容,亦可以通过下拉框选择:

//设计一个继承自ComboBox的下拉框编辑列组件
public class DataGridViewComboBoxExEditingControl : ComboBox, IDataGridViewEditingControl
{
protected int rowIndex;
protected DataGridView dataGridView;
protected bool valueChanged = false;

protected override void OnTextChanged(System.EventArgs e)
{
base.OnTextChanged(e);
NotifyDataGridViewOfValueChange();

}

private void NotifyDataGridViewOfValueChange()
{
valueChanged = true;
dataGridView.NotifyCurrentCellDirty(true);
}
protected override void OnSelectedIndexChanged(EventArgs e)
{
base.OnTextChanged(e);
NotifyDataGridViewOfValueChange();
}

public Cursor EditingPanelCursor
{
get { return Cursors.IBeam; }
}

public DataGridView EditingControlDataGridView
{
get { return dataGridView; }
set { dataGridView = value; }
}

public object EditingControlFormattedValue
{
set
{
Text = value.ToString();
NotifyDataGridViewOfValueChange();
}
get
{
return this.Text;
}

}

public virtual object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
{
return Text;

}

public bool EditingControlWantsInputKey(Keys key, bool dataGridViewWantsInputKey)
{

switch (key & Keys.KeyCode)
{
case Keys.Left:
case Keys.Up:
case Keys.Down:
case Keys.Right:
case Keys.Home:
case Keys.End:
case Keys.Escape:
case Keys.Enter:
case Keys.PageDown:
case Keys.PageUp:
return true;
default:
return false;
}
}

public void PrepareEditingControlForEdit(bool selectAll)
{
if (selectAll)
{
SelectAll();
}
else
{
this.SelectionStart = this.ToString().Length;
}
}
public virtual bool RepositionEditingControlOnValueChange
{
get
{
return false;
}
}

public int EditingControlRowIndex
{
get { return this.rowIndex; }
set { this.rowIndex = value; }
}

public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
{
this.Font = dataGridViewCellStyle.Font;
this.ForeColor = dataGridViewCellStyle.ForeColor;
this.BackColor = dataGridViewCellStyle.BackColor;
}

public bool EditingControlValueChanged
{
get { return valueChanged; }
set { this.valueChanged = value; }
}
}

//定制该扩展列的单元格
public class DataGridViewComboBoxExCell:DataGridViewTextBoxCell
{
public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);

DataGridViewComboBoxExEditingControl clt = DataGridView.EditingControl as DataGridViewComboBoxExEditingControl;

DataGridViewComboBoxExColumn col = (DataGridViewComboBoxExColumn)OwningColumn;

clt.DataSource = col.DataSource;
clt.DisplayMember = col.DisplayMember;
clt.ValueMember = col.ValueMember;

clt.Text = Convert.ToString(this.Value);
}

public override Type EditType
{
get
{
return typeof(DataGridViewComboBoxExEditingControl);
}
}

public override Type ValueType
{
get
{
return typeof(string);
}
}

public override object DefaultNewRowValue
{
get
{
return "";
}
}
}

//定制该扩展列
public class DataGridViewComboBoxExColumn : DataGridViewColumn
{
private object dataSoruce = null;

public object DataSource
{
get { return dataSoruce; }
set { dataSoruce = value; }
}
private string valueMember;

public string ValueMember
{
get { return valueMember; }
set { valueMember = value; }
}
private string displayMember;

public string DisplayMember
{
get { return displayMember; }
set { displayMember = value; }
}

public DataGridViewComboBoxExColumn()
: base(new DataGridViewComboBoxExCell())
{

}

public override DataGridViewCell CellTemplate
{
get
{
return base.CellTemplate;
}
set
{
if (value != null && !value.GetType().IsAssignableFrom(typeof(DataGridViewComboBoxExCell)))
{
throw new InvalidCastException("is not DataGridViewComboxExCell");
}
base.CellTemplate = value;
}
}
private DataGridViewComboBoxExCell ComboBoxCellTemplate
{
get
{
return (DataGridViewComboBoxExCell)this.CellTemplate;
}
}
}

有问题,再找我!
lylymb 2008-03-16
  • 打赏
  • 举报
回复
让其enabled为true,并且将其绑定就可以了
jcyluck 2008-03-15
  • 打赏
  • 举报
回复
DataGridViewComboBoxColumn列如何让其可编辑

编辑COMBOBOX中的ITEM不就行了吗,
将这些ITEM单独保存成一个文件,
在DataGridView打开时读取ITEM并添加到COMBOBOX
hhh715 2008-03-15
  • 打赏
  • 举报
回复
怎么写呢?高手们帮忙写个啊?菜鸟们都等着列
usxue 2008-03-15
  • 打赏
  • 举报
回复
自己写吧
yuanmanguo 2008-03-15
  • 打赏
  • 举报
回复
这道题似乎无解!!!!
qiyousyc 2008-03-15
  • 打赏
  • 举报
回复
下拉选择是自动的,编辑吗?就不好用了
需要自己写代码的。

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧