ASP.NET控件开发基础(19)

http://tech.ddvip.com   2007年09月02日    社区交流

内容摘要:上两篇讨论了基本数据绑定控件的实现步骤,基本上我们按着步骤来就可以做出简单的数据绑定控件了。过年前在看DataGrid的实现,本来想写这个的,但2.0出了GridView了,再说表格控件实现比较复杂,所以先放着。我们一起打开MSDN来看点别的,当然主题还是离不开数据绑定控件。

  2.4实现IPostBackDataHandler,当选中时,postCollection[postDataKey]为"on"

     protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
      {
        int checkbox = -1;
  
        try
        {
          string id = postDataKey.Substring(ClientID.Length + 1);
          if (Char.IsDigit(id[0]))
            checkbox = Int32.Parse(id, CultureInfo.InvariantCulture);
        }
        catch
        {
          return false;
        }
  
        if (checkbox == -1)
          return false;
  
        string val = postCollection[postDataKey];
        bool ischecked = val == "on";
        ListItem item = Items[checkbox];
  
        if (item.Selected != ischecked)
        {
          item.Selected = ischecked;
          return true;
        }
  
        return false;
      }

  到这里实现的就差不多了,BulletedList的实现就不再写了。总之控件在不同生命周期完成了不同的事,一步一步的下来就成就了一个控件。

  在模板控件中使用的注意点:

  记得我以前在用radiobuttonlist时,遇到过一个问题.我想在一个表格中实现一个很简单的效果,如下图

  ASP.NET控件开发基础(19)

  刚开始我以为很简单,把radiobutton放在Repeater里面,radiobutton的GroupName是跟着ID变的。

  却忘了服务器控件进了Repeater模板里面其ID属性就会重命名,这带来了很多的不便。于是我想用radiobuttonlist,radiobuttonlist呈现后则为一个表格,不够灵活,我就不得不重写其布局。

  更讨厌的是由于radiobutton需要Text属性,其不同于DropDownList(其实DropDownList和ListBox才算的上是名副其实的列表控件),所以无法将input作为父标签,为了共享WebControl成员,只得多加个span标签,其重写了最后呈现如下

<span style="color:Red;"><input id="RadioButton1" type="radio" name="RadioButton1" value="RadioButton1" /><label for="RadioButton1">测试</label></span>

  虽然2.0中添加了InputAttributes和LabelAttributes集合属性,但name属性已经定死了。或者就是再添加一个重复的name属性,或者就是再重新写一个?这个算不算是缺点? 感觉用起来就是不顺心。

  感觉越到下面问题越多了,如果有错误还请指出。这次主要学习下如何自定义列表控件,接着打算开始记录下2.0新增的数据源控件如何实现。

责编:豆豆技术应用

正在加载评论...