我想把一个ComboBox绑定到一个DataGrideView里!请各位前辈指正我如何添加到相应的制定列里!并能制定值。
private ComboBox cmb_Temp = new ComboBox();
//这里是绑定ComboBox的值
private void BindSex()
{
DataTable dtSex = new DataTable();
dtSex.Columns.Add("Value");
dtSex.Columns.Add("Name");
DataRow drSex;
drSex = dtSex.NewRow();
drSex[0] = "1";
drSex[1] = "男";
dtSex.Rows.Add(drSex);
drSex = dtSex.NewRow();
drSex[0] = "0";
drSex[1] = "女";
dtSex.Rows.Add(drSex);
cmb_Temp.ValueMember = "Value";
cmb_Temp.DisplayMember = "Name";
cmb_Temp.DataSource = dtSex;
cmb_Temp.DropDownStyle = ComboBoxStyle.DropDownList;
}
//这里绑定DataGrideView的值
private DataTable DataGridBindData()
{
DataTable dtData = new DataTable();
dtData.Columns.Add("ID");
dtData.Columns.Add("Name");
dtData.Columns.Add("Sex");
DataRow drData;
drData = dtData.NewRow();
drData[0] = 1;
drData[1] = "张三";
drData[2] = "1";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 2;
drData[1] = "李四";
drData[2] = "1";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 3;
drData[1] = "王五";
drData[2] = "1";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 4;
drData[1] = "小芳";
drData[2] = "0";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 5;
drData[1] = "小娟";
drData[2] = "0";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 6;
drData[1] = "赵六";
drData[2] = "1";
dtData.Rows.Add(drData);
return dtData;
}
private void Form1_Load(object sender, EventArgs e)
{
this.dataGridView1.DataSource =DataGridBindData();
//下面应该怎么做!请各位前辈指正
//我想绑定到DataGrideView里第三列。
}
private ComboBox cmb_Temp = new ComboBox();
//这里是绑定ComboBox的值
private void BindSex()
{
DataTable dtSex = new DataTable();
dtSex.Columns.Add("Value");
dtSex.Columns.Add("Name");
DataRow drSex;
drSex = dtSex.NewRow();
drSex[0] = "1";
drSex[1] = "男";
dtSex.Rows.Add(drSex);
drSex = dtSex.NewRow();
drSex[0] = "0";
drSex[1] = "女";
dtSex.Rows.Add(drSex);
cmb_Temp.ValueMember = "Value";
cmb_Temp.DisplayMember = "Name";
cmb_Temp.DataSource = dtSex;
cmb_Temp.DropDownStyle = ComboBoxStyle.DropDownList;
}
//这里绑定DataGrideView的值
private DataTable DataGridBindData()
{
DataTable dtData = new DataTable();
dtData.Columns.Add("ID");
dtData.Columns.Add("Name");
dtData.Columns.Add("Sex");
DataRow drData;
drData = dtData.NewRow();
drData[0] = 1;
drData[1] = "张三";
drData[2] = "1";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 2;
drData[1] = "李四";
drData[2] = "1";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 3;
drData[1] = "王五";
drData[2] = "1";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 4;
drData[1] = "小芳";
drData[2] = "0";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 5;
drData[1] = "小娟";
drData[2] = "0";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 6;
drData[1] = "赵六";
drData[2] = "1";
dtData.Rows.Add(drData);
return dtData;
}
private void Form1_Load(object sender, EventArgs e)
{
this.dataGridView1.DataSource =DataGridBindData();
//下面应该怎么做!请各位前辈指正
//我想绑定到DataGrideView里第三列。
}
cmb:要显示的ComboBox控件
private void DisplayComboBox(DataGridViewCell currentCell, ComboBox cmb)
{
Rectangle rect = dgvInputData.GetCellDisplayRectangle(currentCell.ColumnIndex, currentCell.RowIndex, false);
cmb.Width = rect.Width;
cmb.Height = rect.Height;
cmb.Top = rect.Top;
cmb.Left = rect.Left;
cmb.Visible = true;
if (currentCell.Value != null)
cmb.Text = currentCell.Value.ToString();
}
private void Form1_Load(object sender, EventArgs e)
{
this.dataGridView1.DataSource =DataGridBindData();
DataTable dtSex = new DataTable();
dtSex.Columns.Add("Value");
dtSex.Columns.Add("Name");
DataRow drSex;
drSex = dtSex.NewRow();
drSex[0] = "1";
drSex[1] = "男";
dtSex.Rows.Add(drSex);
drSex = dtSex.NewRow();
drSex[0] = "0";
drSex[1] = "女";
dtSex.Rows.Add(drSex);
///
DataGridViewComboBoxColumn cbx = new DataGridViewComboBoxColumn();
cbx.DataSource = dtSex.DefaultView;
cbx.ValueMember = "Value";
cbx.DisplayMember = "Name";
cbx.HeaderText = "Sex";
this.dataGridView1.Columns.Add(cbx); }
我发的连接你看不懂?照上面的做就是啦,将time控件换成ComboBox就是了
string str2 = "SELECT Top 10 Title, EmployeeID, ReportsTo, PostalCode FROM Employees";
private DataTable GetData(string strSQl)
{
DataTable dtData = new DataTable();
using (SqlConnection thisConnection = new SqlConnection(
@"Data Source=.;Initial Catalog=Northwind;Integrated Security=True"))
{
using (SqlDataAdapter thisAdapter = new SqlDataAdapter(
strSQl, thisConnection))
{
thisAdapter.Fill(dtData);
}
thisConnection.Close();
}
return dtData;
}
private void Form1_Load(object sender, EventArgs e)
{
DataTable dtSource = GetData(str2);
this.dataGridView1.Columns.Add("Title", "Title");
this.dataGridView1.Columns.Add("EmployeeID", "EmployeeID");
this.dataGridView1.Columns.Add("ReportsTo", "ReportsTo");
this.dataGridView1.Columns.Add("PostalCode", "PostalCode");
this.dataGridView1.Columns[0].Width = 200; foreach (DataRow dr in dtSource.Rows)
{
this.dataGridView1.Rows.Add(dr[0], dr[1], dr[2], dr[3]);
} ExDataGridView exDgv = new ExDataGridView(this.dataGridView1, dtSource);
exDgv.BindControl();
} /// <summary>
/// DataGridView的扩展: 在DataGridView上添加子控件
/// </summary>
public class ExDataGridView
{
private ComboBox cbTitle = new ComboBox(); private DataGridView dtModel; // DataGridView实例
private DataTable dtSource = null; // 数据表
private BindingSource tBindingSource = null; // 绑定源 public ExDataGridView(DataGridView model,DataTable source)
{
this.dtModel = model;
this.dtSource = source;
} /// <summary>
/// 在DataGridView上绑定控件
/// </summary>
public void BindControl()
{
this.tBindingSource = new BindingSource();
this.tBindingSource.DataSource = this.dtSource.DefaultView; this.cbTitle.Visible = false; //置控件为不可见属性
this.dtModel.Controls.Add(cbTitle); this.cbTitle.DisplayMember = "Title";
this.cbTitle.DataSource = tBindingSource.DataSource;
this.cbTitle.DropDownStyle = ComboBoxStyle.DropDown;
this.cbTitle.SelectedIndexChanged += new EventHandler(Combox_SelectedIndexChanged); this.dtModel.ReadOnly = true;
this.dtModel.CurrentCellChanged += new EventHandler(DataGridView_CurrentCellChanged);
this.dtModel.Scroll += new ScrollEventHandler(DataGridView_Scroll);
this.dtModel.ColumnWidthChanged += new DataGridViewColumnEventHandler(DataGridView_ColumnWidthChanged);
} #region 私有的方法
//隐藏指定控件
private void HideControl()
{
this.cbTitle.Visible = false;
}
// 当用户单击至指定位置时显示相应控件
private void DataGridView_CurrentCellChanged(object sender, EventArgs e)
{
HideControl(); //得到单元格表示区域的矩形
if (this.dtModel.CurrentCell == null)
return;
Rectangle rect = this.dtModel.GetCellDisplayRectangle(this.dtModel.CurrentCell.ColumnIndex,
this.dtModel.CurrentCell.RowIndex, false); string cellValue = (this.dtModel.CurrentCell.Value == null) ? string.Empty :
this.dtModel.CurrentCell.Value.ToString(); if (this.dtModel.CurrentCell.ColumnIndex == 0) // 单击第一列时显示列表控件
{
this.cbTitle.Location = new Point(rect.Left, rect.Top);
this.cbTitle.Size = new Size(rect.Width, rect.Height);
this.cbTitle.BackColor = Color.Yellow;
this.cbTitle.Visible = true;
this.cbTitle.Text = cellValue;
}
}
// 滚动DataGridView时将下拉列表框设为不可见
private void DataGridView_Scroll(object sender, ScrollEventArgs e)
{
HideControl();
}
// 改变DataGridView列宽时将下拉列表框设为不可见
private void DataGridView_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
HideControl();
}
// 当用户选择下拉列表框时改变DataGridView单元格的内容
private void Combox_SelectedIndexChanged(object sender, EventArgs e)
{
this.dtModel.CurrentCell.Value = ((ComboBox)sender).Text;
}
#endregion
}
DataGridViewComboBoxColumn cmb_Temp = new DataGridViewComboBoxColumn();
DataGridViewTextBoxColumn text1 = new DataGridViewTextBoxColumn();
DataGridViewTextBoxColumn text2 = new DataGridViewTextBoxColumn();
//这里是绑定ComboBox的值
DataTable BindSex()
{
DataTable dtSex = new DataTable();
dtSex.Columns.Add("Value");
dtSex.Columns.Add("Name");
DataRow drSex;
drSex = dtSex.NewRow();
drSex[0] = "1";
drSex[1] = "男";
dtSex.Rows.Add(drSex);
drSex = dtSex.NewRow();
drSex[0] = "0";
drSex[1] = "女";
dtSex.Rows.Add(drSex);
return dtSex;
}
//这里绑定DataGrideView的值
DataTable DataGridBindData()
{
DataTable dtData = new DataTable();
dtData.Columns.Add("ID");
dtData.Columns.Add("Name");
dtData.Columns.Add("Sex");
DataRow drData;
drData = dtData.NewRow();
drData[0] = 1;
drData[1] = "张三";
drData[2] = "1";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 2;
drData[1] = "李四";
drData[2] = "1";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 3;
drData[1] = "王五";
drData[2] = "1";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 4;
drData[1] = "小芳";
drData[2] = "0";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 5;
drData[1] = "小娟";
drData[2] = "0";
dtData.Rows.Add(drData);
drData = dtData.NewRow();
drData[0] = 6;
drData[1] = "赵六";
drData[2] = "1";
dtData.Rows.Add(drData);
return dtData;
} private void Form2_Load(object sender, EventArgs e)
{
text1.DataPropertyName = "ID";
text1.HeaderText = "ID";
text2.DataPropertyName = "Name";
text2.HeaderText = "Name";
cmb_Temp.DataPropertyName = "Sex";
cmb_Temp.DisplayMember = "Name";
cmb_Temp.ValueMember = "Value";
cmb_Temp.HeaderText = "Sex";
cmb_Temp.DataSource = BindSex(); dataGridView1.Columns.AddRange(new DataGridViewColumn[] { text1, text2, cmb_Temp });
dataGridView1.DataSource = DataGridBindData();
}
public Form1()
{
InitializeComponent(); this.dataGridView1.DataSource = DataGridBindData();
this.dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
cmb_Temp.KeyPress += new KeyPressEventHandler(cmb_Temp_KeyPress);
cmb_Temp.FlatStyle = FlatStyle.Flat;
} void cmb_Temp_KeyPress(object sender, KeyPressEventArgs e)
{
DataGridView DGV = (DataGridView)sender; DGV.CurrentCell.Value = cmb_Temp.Text;
} void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
DataGridView DGV=(DataGridView )sender ; if (DGV.Columns [ DGV.CurrentCell.ColumnIndex].DataPropertyName =="Sex")
{
cmb_Temp.Text = e.Control.Text; cmb_Temp.Parent = DGV.EditingPanel;
cmb_Temp.Size = DGV.GetCellDisplayRectangle(DGV.CurrentCell.ColumnIndex,
DGV.CurrentCell.RowIndex, false).Size;
cmb_Temp.BringToFront(); BindSex();
}
}
当点击一下才出来下拉框男、女!
id Name Sex
1 张三 男(下拉)
2 李四 男(下拉)
3 王五 男(下拉)
4 小芳 女(下拉)也就是这样的结果!
dataGridView1.AllowUserToAddRows = false;
DataGridViewComboBoxColumn cmb_Temp = new DataGridViewComboBoxColumn();
DataGridViewTextBoxColumn text1 = new DataGridViewTextBoxColumn();
DataGridViewTextBoxColumn text2 = new DataGridViewTextBoxColumn();
dataGridView1.Columns.AddRange(new DataGridViewColumn[] { cmb_Temp });
那要加个事件了,而且其它部分也要改
public Form1()
{
InitializeComponent(); this.dataGridView1.DataSource = DataGridBindData();
this.dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
cmb_Temp.DropDownClosed += new EventHandler(cmb_Temp_DropDownClosed);
cmb_Temp.FlatStyle = FlatStyle.Flat; cmb_Temp.Parent = this; // 让绑定起作用,第一次SelectedValue才有效
cmb_Temp.Visible = false;
BindSex(); this.dataGridView1.CellFormatting += new DataGridViewCellFormattingEventHandler(dataGridView1_CellFormatting);
} void cmb_Temp_DropDownClosed(object sender, EventArgs e)
{
this.dataGridView1.CurrentCell.Value = cmb_Temp.SelectedValue;
} void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DataGridView DGV = (DataGridView)sender; if (DGV.Columns[e.ColumnIndex].DataPropertyName == "Sex")
if (e.Value != null)
if (e.Value.ToString() == "1")
e.Value = "男";
else if (e.Value.ToString() == "0")
e.Value = "女"; } void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
DataGridView DGV = (DataGridView)sender; cmb_Temp.Visible = true; if (DGV.Columns[DGV.CurrentCell.ColumnIndex].DataPropertyName == "Sex")
{
if (e.Control.Text == "男")
cmb_Temp.SelectedValue = 1;
else if (e.Control.Text == "女")
cmb_Temp.SelectedValue = 0; cmb_Temp.Parent = DGV.EditingPanel;
cmb_Temp.Size = DGV.GetCellDisplayRectangle(DGV.CurrentCell.ColumnIndex,
DGV.CurrentCell.RowIndex, false).Size;
cmb_Temp.BringToFront();
}
}