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的检查,后面再补上。
后面这个小工具会交给其他同学扩展开发一下,然后拿来使用。如果有值得分享的进展,我也会记录下来。