我写的了一个ASP.Net控件, 继承WebControl~public class WebControlsExtend : System.Web.UI.WebControls.WebControl我想增加一个DataSource属性(下拉选择界面上的DataSet)和一个DataMember属性(选择DataSet中的表)。private System.Data.DataSet _dataSource = null;
public System.Data.DataSet DataSource
{
get
{
return _dataSource;
}
set
{
_dataSource =value ;
}
}
发现这样写根本行不通,页面打开后报错,原因是HTML中的DataSource值无法正确转换为DataSet。查看相关资料,获知Asp.net Web控件属性只对String、Int、枚举类型进行自动转换,DataSet属于特殊类型无法自动转换。
所以,改写代码如下:private string _dataSource = null;
public string  DataSource
{
get
{
return _dataSource;
}
set
{
_dataSource =value ;
}
}
这样的属性代码,控件是正常的,但遇到两个无法解决的问题:1.怎样将String类型转换为DataSet类型?
2.如果在DataSource属性中下拉框选择当前可用的DataSet ?
再次感谢热心帮助的朋友!!!~~~ 有例子源码发邮件给我:[email protected]

解决方案 »

  1.   

    参考
    Data Binding in WebControls
    http://www.codetools.com/aspnet/webcontrolsdatabinding.asp
      

  2.   

    1、你应该按如下的形式来定义你的属性
    public object DataSource{}
    该属性可以设置为任何实现IListSource和IEnumerable接口的对象。所以你的DataSurce属性
    private object m_DataSource;
    public object DataSource{
          get{
            return m_dataSource;
          }
          set{
           // 在设置属性之前为了安全可以先检查对象的类型可以使用is运算符
            m_dataSource = value;
          }
    }
    该方法需要你处理OnDataBinding事件,此时可以把你的数据绑定到你的控件上!2、这个要依赖你设置数据绑定时的列。如果你是使用组合控件的方式那么可以在控件内部完成绑定工作(假设使用的是DropDownList控件),这个和普通的程序没有什么不同。同样上面的DataSource可以通过使用公共属性的方法把DropDownList的属性公开给用户。// 题外话如果你是huasheng的话,下面的话是对你说的!
    老兄你先在也搞.NET了,现在工作怎么样?也不联系我!我没有现成的源码,最近比较忙我们的产品快发版了,忙过这几天要放几天假,我准备去武夷山玩一趟!
      

  3.   

    cuike519(marshal(修练中...)) 老兄已经说的很明白了,其实你可以看一下Repeater控件,其DataSource为什么可以绑定多种数据类型,就明白了
      

  4.   

    感谢 saucer(思归) 、cuike519(marshal(修练中...)) 及其它朋友的热情相助,问题已经解决了,控件写出来了效果还不错~~~再次感谢,向各们老鸟们致敬!!!分银子~~~