日期:2014-05-19  浏览次数:20845 次

如何把ComboBox对象绑定到DataGrid的单元格
如何把ComboBox对象绑定到DataGrid的单元格

------解决方案--------------------
//初始化窗口
private void Form1_Load(object sender, System.EventArgs e)
{
//从数据库中读取一张表
string sSql = "select * from stuInfo ";
DBManager db = new DBManager();
DataTable dt = db.QueryDT(sSql);
//一定要该名子
dt.TableName = "学生表 ";
this.dataGrid1.DataSource = dt;


//创建一个DataDrid样式的对象
DataGridTableStyle dgts = new DataGridTableStyle();
//让样式对象指向你要改的表
dgts.MappingName = "学生表 ";
this.dataGrid1.TableStyles.Clear();
this.dataGrid1.TableStyles.Add(dgts);
//得到你要修改样式的那一列
DataGridColumnStyle dgcs = dgts.GridColumnStyles[ "stuSex "];
DataGridTextBoxColumn dgtc = (DataGridTextBoxColumn)dgcs;

//创建一个ComboBox对象 并改变他的一些属性
ComboBox cbx = new ComboBox();
cbx.Items.Add( "男 ");
cbx.Items.Add( "女 ");
cbx.Cursor = Cursors.Hand;
cbx.Dock = DockStyle.Fill;

//为ComboBox添加委托事件
cbx.SelectionChangeCommitted+=new EventHandler(cbx_SelectionChangeCommitted);

//取出那个单元格的文本框,并把ComboBox放在上面
dgtc.TextBox.Controls.Clear();
dgtc.TextBox.Controls.Add(cbx);
dgtc.ReadOnly = true;

//为TextBox添加委托事件
dgtc.TextBox.Enter +=new EventHandler(TextBox_Enter);
}

//当选中那个文本框是触发的事件处理方法
public void TextBox_Enter(object sender, System.EventArgs e)
{
TextBox txt = (TextBox)sender;
string s = txt.Text;
ComboBox cbx = (ComboBox)txt.Controls[0];
cbx.Text = s;
}

//当选中ComboBox中某一项时触发的时间
private void cbx_SelectionChangeCommitted (object sender, System.EventArgs e)
{
ComboBox cbx = (ComboBox)sender;
string item = cbx.SelectedItem.ToString();
this.dataGrid1[this.dataGrid1.CurrentCell] = item;
}

以上我没有做封装,可以把它写的再通用一点做一个封装