如何在C#中用弹出窗口来对DataGrid的某一列进行修改

本文介绍了如何在C#中通过自定义DataGridTextBoxColumn子类,实现当用户点击DataGrid某一列时,弹出一个窗口进行详细的选择操作。详细展示了代码实现,包括自定义列类、主窗体调用方法以及弹出窗口的处理。
摘要由CSDN通过智能技术生成

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值