代码改变世界

改进的ComboboxDataGridView

2010-06-23 22:53  Daniel Xu  阅读(1503)  评论(1编辑  收藏  举报

  想着稍加改动就可以用的ComboboxDatagridView用了,遇到一个问题,博主用的是VS2005,目前我用的是VS2008,移植到VS2008上怎么都不能运行了,报了“为将对象引用到设置到对象是实例”,这个错误,找的我有些郁闷了,怎么都找不到错到那了,网上在搜索下例子,另外一个哥们给了修改后的例子程序

http://www.cnblogs.com/perfect/archive/2008/02/22/1078189.html 参考他给的例子来做。

  同样的问题又出现了,为将对象引用到设置到对象是实例”,程序不是很大,单步跟踪问题出在哪了,同时比对下两个环境下的代码,发现问题,组件在VS2008生成过程中生成如下代码

 

VS2008生成的组件代码
public DataWindow()
{
InitializeComponent();
}
#endregion

public DataWindow(IContainer container)
{
container.Add(
this);

InitializeComponent();

}

查找资料了解如下:

 

  DataWindow(IContainer container) 是 Windows Forms 用来做初始化的,在一般情况下,每一个 Form 都包含一个 Container,这个 Container 包括了所有附加在该 Form 上的 UI 控件,这样,在 Form Dispose 的时候,可以方便的通过 Container 的 Dispose 方法进行回收。

另外核对了界面上的两个控件属性有哪些区别,很明显一点vs2005下生成的combobox属性有DataGridView,我的没有这一项,下面还有几个属性也没有,跟踪了几次代码看到了一些原因,对代码进行修改

 

修改后的代码
public comboboxDataGrid()
{
DrawDataGridView();
this.OnScroll += new ComboBoxDataGridViewScroll(ComboBoxDataGridView_OnScroll);
}

public comboboxDataGrid(IContainer container)
{

container.Add(
this);

InitializeComponent();

DrawDataGridView();
this.OnScroll += new ComboBoxDataGridViewScroll(ComboBoxDataGridView_OnScroll);

}

运行程序通过了,没有错误了,点击界面上的combobox,datagridview是看到了,但是没有什么数据,combobox中显示system.data.datarowview,出这个错误是数据源没有绑定好,还有一点是combobox属性上有DataGirdView了,继续找原因,添加如下代码

 

 

数据源代码
[Description("数据源"), Browsable(true), Category("N8")]
public new Object DataSource
{
set
{
if (m_sDisplayField != String.Empty)
{
DataGridView.Columns.Clear();
DataGridView.AutoGenerateColumns
= false;
string[] sDisplayFields = m_sDisplayField.Split(',');
foreach (string sDisplay in sDisplayFields)
{
DataGridViewTextBoxColumn dgvCell
= new DataGridViewTextBoxColumn();
dgvCell.Name
= sDisplay;
dgvCell.DataPropertyName
= sDisplay;
DataGridView.Columns.Add(dgvCell);
}
}
DataGridView.DataSource
= value;
}
get
{
return DataGridView.DataSource;
}
}

属性里没有数据源,添加数据源代码后,运行成功,而且效果也出来了。

 

  后记:这个功能还是非常实用的,如果谁有兴趣可以多研究下。目前实行的是点击下拉框把数据都列出来,如果输入数据进行检索呢?这个功能会更好用,随后会完善这个功能,也希望有兴趣的朋友一起研究下。