改进的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生成过程中生成如下代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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,我的没有这一项,下面还有几个属性也没有,跟踪了几次代码看到了一些原因,对代码进行修改
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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了,继续找原因,添加如下代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
[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;
}
}
属性里没有数据源,添加数据源代码后,运行成功,而且效果也出来了。
后记:这个功能还是非常实用的,如果谁有兴趣可以多研究下。目前实行的是点击下拉框把数据都列出来,如果输入数据进行检索呢?这个功能会更好用,随后会完善这个功能,也希望有兴趣的朋友一起研究下。
作者:DanielXu
出处:http://www.cnblogs.com/lovetsfuer/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。