How to add a Pop-Up Text Box to the cell in WinForms GridControl?
By default, a text box cannot be added to the WinForms GridControl cell. This can be achieved by creating the custom CellModel (PopUpTextBoxCellModel) and CellRenderer (PopUpTextBoxCellRenderer) from GridDropDownCellModel and GridDropDownCellRenderer.
The text box can be added to the DropDown cell by overriding the InitializeDropDownContainer method in a custom CellRenderer(PopUpTextBoxCellRenderer).
The following are the steps that need to be followed.
Step 1: Create PopTextBoxCellModel by deriving it from the GridDropDownCellModel class.
public class PopUpTextBoxCellModel : GridDropDownCellModel
{
protected PopUpTextBoxCellModel(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
public PopUpTextBoxCellModel(GridModel grid)
: base(grid)
{
}
public override GridCellRendererBase CreateRenderer(GridControlBase control)
{
return new PopUpTextBoxCellRenderer(control, this);
}
}Public Class PopUpTextBoxCellModel
Inherits GridDropDownCellModel
Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
MyBase.New(info, context)
End Sub
Public Sub New(ByVal grid As GridModel)
MyBase.New(grid)
End Sub
Public Overrides Function CreateRenderer(ByVal control As GridControlBase) As GridCellRendererBase
Return New PopUpTextBoxCellRenderer(control, Me)
End Function
End ClassStep 2: Create PopUpTextBoxCellRenderer from the GridDropDownCellRenderer.
public class PopUpTextBoxCellRenderer : GridDropDownCellRenderer
{
private TextBox tbc;
private bool isModified = false;
public PopUpTextBoxCellRenderer(GridControlBase grid, GridCellModelBase cellModel)
: base(grid, cellModel)
{
this.DisableTextBox = true;
DropDownButton = new GridCellComboBoxButton(this);
this.tbc = null;
InitializeDropDownContainer();
}
//Set the cell text for Pop-up text.
protected override void OnInitialize(int rowIndex, int colIndex)
{
base.OnInitialize(rowIndex, colIndex);
this.tbc.Text = this.Grid.Model[rowIndex, colIndex].Text;
this.isModified = false;
}
//Set the TextBox control to DropDown.
protected override void InitializeDropDownContainer()
{
base.InitializeDropDownContainer();
tbc = new TextBox();
tbc.Multiline = true;
tbc.AcceptsReturn = true;
tbc.Dock = DockStyle.Fill;
tbc.BackColor = SystemColors.Info;
tbc.Visible = true;
this.tbc.TextChanged += new EventHandler(textBox_TextChanged);
this.DropDownContainer.CloseUp += new PopupClosedEventHandler(textbox_PopupClosed);
this.DropDownContainer.Controls.Add(tbc);
this.DropDownContainer.Size = new Size(100, 40);
}
//This event used to set the Pop-up TextBox edited value to cell, after closing the Pop-Up TextBox.
private void textbox_PopupClosed(object sender, PopupClosedEventArgs e)
{
if (tbc != null && this.isModified)
{
Grid.Model[this.CurrentCell.RowIndex, this.CurrentCell.ColIndex].Text = this.tbc.Text;
this.CurrentCell.IsModified = false;
this.isModified = false;
this.CurrentCell.Refresh();
}
}
private void textBox_TextChanged(object sender, EventArgs e)
{
isModified = true;
}
}Public Class PopUpTextBoxCellRenderer
Inherits GridDropDownCellRenderer
Private tbc As TextBox
Private isModified As Boolean = False
Public Sub New(ByVal grid As GridControlBase, ByVal cellModel As GridCellModelBase)
MyBase.New(grid, cellModel)
Me.DisableTextBox = True
DropDownButton = New GridCellComboBoxButton(Me)
Me.tbc = Nothing
InitializeDropDownContainer()
End Sub
'Set the cell text for Pop-up text.
Protected Overrides Sub OnInitialize(ByVal rowIndex As Integer, ByVal colIndex As Integer)
MyBase.OnInitialize(rowIndex, colIndex)
Me.tbc.Text = Me.Grid.Model(rowIndex, colIndex).Text
Me.isModified = False
End Sub
'Set the TextBox control to DropDown.
Protected Overrides Sub InitializeDropDownContainer()
MyBase.InitializeDropDownContainer()
tbc = New TextBox()
tbc.Multiline = True
tbc.AcceptsReturn = True
tbc.Dock = DockStyle.Fill
tbc.BackColor = SystemColors.Info
tbc.Visible = True
AddHandler tbc.TextChanged, AddressOf textBox_TextChanged
AddHandler DropDownContainer.CloseUp, AddressOf textbox_PopupClosed
Me.DropDownContainer.Controls.Add(tbc)
Me.DropDownContainer.Size = New Size(100, 40)
End Sub
'This event used to set the Pop-up TextBox edited value to cell, after closing the Pop-Up TextBox.
Private Sub textbox_PopupClosed(ByVal sender As Object, ByVal e As PopupClosedEventArgs)
If tbc IsNot Nothing AndAlso Me.isModified Then
Grid.Model(Me.CurrentCell.RowIndex, Me.CurrentCell.ColIndex).Text = Me.tbc.Text
Me.CurrentCell.IsModified = False
Me.isModified = False
Me.CurrentCell.Refresh()
End If
End Sub
Private Sub textBox_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
isModified = True
End Sub
End Class Step 3: Set the PopUpTextBoxCellModel to GridControl.
this.gridControl1.Model.CellModels["PopUpTextBox"] = new PopUpTextBoxCellModel(this.gridControl1.Model);
this.gridControl1.ColStyles[2].CellType = "PopUpTextBox";Me.gridControl1.Model.CellModels("PopUpTextBox") = New PopUpTextBoxCellModel(Me.gridControl1.Model)
Me.gridControl1.ColStyles(2).CellType = "PopUpTextBox"The Screenshot below displays the pop-up textbox cell in GridControl

Sample Links