当前位置:编程学习 > C#/ASP.NET >>

请教:自己开发的控件,在winform里能响应自定义的事件,嵌在html页面中调事件报空指针

项目是一个异构bs的系统,通过webservice获得数据,数据量比较大,而且客户原来的系统是cs结构的

用DevExpress的表格控件展示的数据,为了保持操作习惯吧,我们用C#自己做了个控件,控件暴露一个

void AppendXML(string xmlString)方法,方法里解析xml字符串,构造一个dataset,将dataset和

devexpress控件绑定在一起展示数据,这部分目前都正常。

在自定义控件我们暴露一个双击GridDoubleClick事件,当DevExpress的Grid双击时,激发这个控件的双击事

件,以便在html里能用js响应事件,进行交互操作。问题出在当把这个控件放在winform里时,

GridDoubleClick能正常触发,嵌入在HTML代码中时,grid双击事件里调GridDoubleClick事件时会报空指针。

请教各位这个空指针是什么原因

控件嵌在网页中时this.GridDoubleClick是null,导致自定义的事件不能触发。

        //定义事件
        public event GridDoubleClickHandler GridDoubleClick;
        //devexpress的表格双击时触发GridDoubleClick事件
        private void gvData_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                int rowHandle = -1;//当前行,默认为-1,标识未选择任何行
                DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo info = (sender as BandedGridView).CalcHitInfo((e as MouseEventArgs).Location);

                //获取双击事件的当前行
                if (info == null)
                    throw new Exception("未定位到双击行");
                if (info.InRow)
                    rowHandle = info.RowHandle;
                if (rowHandle >= 0)
                {
                    if (GridDoubleClick != null)
                        this.GridDoubleClick(rowHandle); //控件在网页中时GridDoubleClick是null

                }
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.StackTrace);
                MessageBox.Show(e1.ToString());
            }
        }

事件接口声明

    //事件处理
    public delegate void GridDoubleClickHandler(int value);

    ///<summary>
    /// 该接口定义了Grid的事件
    ///</summary>
    [Guid("9661B223-6188-4849-B293-C7D9D8173E49")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IGridEvents
    {
        [DispId(0x60020000)]
        void GridDoubleClick(int rowIndex);
    }

Grid是我们开发的控件,IGridEvents注册

    [Guid("9661B223-6188-4849-B292-C7D9D8173E49"),
        ClassInterface(ClassInterfaceType.AutoDual),
        ComSourceInterfaces(typeof(IGridEvents))]
    public partial class Grid : UserControl, IObjectSafety
    {
        ///////////////////
        //解析后的内容,放在DataTable中
        private DataTable tblData = null;
        private IList<CITICHeader> headers = null;

        //通过XML文件传入,通过具体方法向调用页面返回
        private string totalPage;//总页数
        private string totalRecord;//总记录数
        private string runtimePageSize;//每页显示记录数
        private string currentPage;//当前页面
        private bool isMultiSelect=false;//是否多选

控件 HTML
补充:.NET技术 ,  组件/控件开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,