Asp.Net开发手记

      因为后续项目需要用Asp.Net开发,这周先写了个周报管理的小工具练手。这个工具主要提供以下功能:1.登陆、注册;2.填写周报;3.根据用户名进行周报检索;4.选择周报进行阅读。开发环境采用的是VS2010,后台语言采用的是C#,数据库采用Sql Server2008。

       以前只有WPF的开发经验,对于Web开发一窍不通……索性微软的技术上手快,但是贯通难……这次开发首先通过VS去建立了一个带母版的项目,然后再进行修改……数据库直接在VS里面通过可视化的界面新建了一些表单。然后通过DataBaseEntities进行访问。这个东西相当好用,可以把数据库当成对象一样操作……

       其他都没啥好多说的,关键问题在于ListView这个控件不太好用……我不知道咋去触发SelectedChange这个事件……于是我想绕过去,一开始用的是对于每一个ListItem附加一个Button,后来发现在Button_Click事件里面也不知道当前ListView的SelectIndex……所以只好换方法,后来采用的是给每个ListItem附加一个RadioButton,同时整个ListView给一个Button来控制,后来发现也不行……于是上网找解决方案。然在http://www.heartysoft.com/Selecting-ListView-Items-with-CheckBoxes找到了解决方案。它的核心代码在于:

 public static class ListViewExtensions
    {

        public static List<int> GetSelectedDataKeys(this ListView control, string checkBoxId)
        {
            
            return control.Items.Where(x => IsChecked(x, checkBoxId))
               .Select(x => x.DisplayIndex)
               .ToList();
        }

        private static bool IsChecked(ListViewDataItem item, string checkBoxId)
        {
            var control = item.FindControl(checkBoxId) as CheckBox;
            if (control == null)
            {
                return false;
            }

            return control.Checked;
        }
    }

使用方法大致如下:

        protected void WatchButton_Click(object sender, EventArgs e)
        {
         
            var selectedKeys = this.ReportListView.GetSelectedDataKeys("SelectedCheckBox");
            //var selectedIds = selectedKeys.Select(x => new Guid(x.Value.ToString()));

            if (selectedKeys.Count() > 0)
            {
                Session["ReportIndex"] = selectedKeys[0];

                Response.Redirect("~/ReportShowPage.aspx");
            }
        }

  这个地方没有做选择了多个CheckBox的检查,后面再补上。

  后面这个小工具会交给其他同学扩展开发一下,然后拿来使用。如果有值得分享的进展,我也会记录下来。

posted on 2012-09-14 21:05  hibix  阅读(211)  评论(0编辑  收藏  举报

导航