如何在 DataGrid 中添加其他控件 - (第一部分)






4.81/5 (22投票s)
如何在 DataGrid 中添加其他控件?
引言
我一直想知道如何在 DataGrid
单元格中使用诸如 TextBox
、ComboBox
、RadioButton
、Button
等控件。你也可以轻松地触发它们的事件。现在这样做非常简单!你必须创建一个 DataGridTableStyle
并向其中添加 DataGridTextboxColumn
。之后,你可以将你想要的每个控件添加到 DataGridTextboxColumn
中。
TextBox txtBox = new TextBox();
datagridTextBoxColumn.TextBox.Controls.Add( txtBox );
现在,让我描述我的示例。首先,我设计一个 DataTable
并用它填充我的 DataGrid
private DataSet ds = new DataSet("myDs");
private DataTable dt = new DataTable("myDT");
private void FillData()
{
//Add datatable object to dataset object.
ds.Tables.Add(dt);
//Create a new column for datatable.
DataColumn dc = new DataColumn("Label_Col" ,
System.Type.GetType("System.String"));
//Add created column to datatable object.
dt.Columns.Add(dc);
//Create a new column for datatable.
dc = new DataColumn("TextBox_Col" ,
System.Type.GetType("System.String"));
//Add created column to datatable object.
dt.Columns.Add(dc);
//Create a new column for datatable.
dc = new DataColumn("ComboBox_Col",
System.Type.GetType("System.String"));
//Add created column to datatable object.
dt.Columns.Add(dc);
//Add new row to datatble.
DataRow dr;
for(int i=1; i<=5; i++)
{
dr = dt.NewRow();
dr["Label_Col"] = "lable"+i.ToString();
dr["TextBox_Col"] = "textbox"+i.ToString();
dr["ComboBox_Col"] = "combobox"+i.ToString();
dt.Rows.Add(dr);
}
}
在 DataGrid
中加载数据并设计其 DataGridTableStyle
后,你必须在 DataGrid
的 MouseUp
事件中编写以下代码
hitTestGrid = dataGrid.HitTest(e.X, e.Y);
if(hitTestGrid != null)
{
//Which column of datagrid has been clicked.
switch(hitTestGrid.Column)
{
case 0:
//Add label control to datagrid.
dataGridLable.TextBox.Controls.Add( lblControl );
lblControl.Text =
dataGrid[dataGrid.CurrentRowIndex , 0].ToString();
break;
case 1:
//Add texbox control to datagrid.
dataGridTextBox.TextBox.Controls.Add( txtControl );
txtControl.Text =
dataGrid[dataGrid.CurrentRowIndex , 1].ToString();
txtControl.Focus();
break;
case 2:
//Add combobox control to datagrid.
dataGridComboBox.TextBox.Controls.Add( cboControl );
for(int i=0; i<CBOCONTROL.ITEMS.COUNT; pre }< } break;
cboControl.SelectedIndex="i;" 2].ToString()) ,
dataGrid[dataGrid.CurrentRowIndex if(
cboControl.Items[i].ToString()="=" { i++)>
你可以初始化将要添加到 DataGrid
的控件,并触发它们的事件
private void InitializeControls()
{
//label property
lblControl.Cursor = Cursors.Hand;
lblControl.ForeColor = Color.Red;
lblControl.Font = new Font("Arial", 12,
FontStyle.Bold | FontStyle.Italic);
//textbox property
txtControl.Cursor = Cursors.Hand;
txtControl.BackColor = Color.WhiteSmoke;
txtControl.ForeColor = Color.DarkSlateBlue;
txtControl.Font = new Font("Arial", 8, FontStyle.Bold);
//textbox events.
txtControl.TextChanged+=new EventHandler(txtTextChanged);
//Define and add ComboBox rows, will be added to data grid.
for(int i=1; i<=5; i++)
cboControl.Items.Add("combobox"+i.ToString());
//combobox property
cboControl.Cursor = Cursors.Hand;
cboControl.DropDownStyle = ComboBoxStyle.DropDownList;
//combobox events.
cboControl.SelectedIndexChanged+=
new EventHandler(cboSelectedIndexChanged);
}