请教:自己开发的控件,在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注册
控件 HTML
[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;//是否多选
补充:.NET技术 , 组件/控件开发