DataGrid是可以绑定ComboBox来进行选择某一列的值,但是有时候选项太多,或者通过一列数据无法完全说明选项含义的时候,就希望来弹出一个窗口,来对子项进行更充分的说明,以供选择。
我下面的例子就是说明如何实现一个弹出窗口来对子项进行选择。
首先,继承DataGridTextBoxColumn来定义自己的数据列,具体如下:
public delegate string PopupWindow();
public class DataGridPopupColumn: DataGridTextBoxColumn
{
private Panel pnlPopup;//Basic control for column
private System.Windows.Forms.CurrencyManager _source = null;
private int _rowNum;
public static int _RowCount = -1;
PopupWindow PopupWindowHandle;
public DataGridPopupColumn( PopupWindow ShowPopupWindow ) : base()
{
// Init class members
PopupWindowHandle = ShowPopupWindow;
pnlPopup = new Panel();
// Define event handler
pnlPopup.Leave += new EventHandler( LeavePanel );
pnlPopup.Click += new EventHandler( ClickPanel );
pnlPopup.Paint += new PaintEventHandler( PaintPanel );
}
private void LeavePanel( object sender, EventArgs e )
{
pnlPopup.Hide();//Hide panel
}
private void ClickPanel( object sender, EventArgs e )
{
// Show a window to select value
object objReturn = this.pnlPopup.Parent.Invoke( PopupWindowHandle );
if( objReturn != null )
{
// Get value from window result
this.TextBox.Text = objReturn.ToString();
// Save it to data source
SetColumnValueAtRow( _source, _rowNum, this.TextBox.Text);
// Re-draw panel
this.pnlPopup.Refresh();
Invalidate();
}
}
private void PaintPanel( object sender, System.Windows.Forms.P