惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
WordPress大学
WordPress大学
Help Net Security
Help Net Security
Jina AI
Jina AI
Security Latest
Security Latest
Y
Y Combinator Blog
Project Zero
Project Zero
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
Know Your Adversary
Know Your Adversary
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
NISL@THU
NISL@THU
Cisco Talos Blog
Cisco Talos Blog
博客园 - 司徒正美
MyScale Blog
MyScale Blog
Cyberwarzone
Cyberwarzone
D
Docker
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
C
CERT Recently Published Vulnerability Notes
B
Blog
L
LangChain Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
SecWiki News
SecWiki News
The Hacker News
The Hacker News
C
Check Point Blog
L
Lohrmann on Cybersecurity
V2EX - 技术
V2EX - 技术
S
Securelist
T
Threat Research - Cisco Blogs
Stack Overflow Blog
Stack Overflow Blog
TaoSecurity Blog
TaoSecurity Blog
云风的 BLOG
云风的 BLOG
Latest news
Latest news
人人都是产品经理
人人都是产品经理
L
LINUX DO - 最新话题
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Register - Security
The Register - Security
Webroot Blog
Webroot Blog
Simon Willison's Weblog
Simon Willison's Weblog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Security Blog
Microsoft Security Blog
AWS News Blog
AWS News Blog
C
Cybersecurity and Infrastructure Security Agency CISA
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
小众软件
小众软件
T
Tailwind CSS Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
宝玉的分享
宝玉的分享
O
OpenAI News

博客园 - hulu

从一个int值显示相应枚举类型的名称或者描述 第8章 商品目录管理 第4章 创建商品目录 第2,第三章 概要 Scott Mitchell的ASP.NET2.0数据指南中文版索引 如何自定义gridview的表格显示? 7/14 原型编码阶段里程碑完成 asp.net2.0 的 gridview 7/9 原型编码阶段: (6) 使用DetailsView和FormView(7-5 11:54) - hulu 7/5 原型编码阶段: (5) 使用ADO.NET 成功软件开发者的9种编程习惯(一) 6/29 原型编码阶段:(3) CommandField,TemplateField 6/29 原型编码阶段:(2) GridView的数据库操作 6/29 原型编码阶段:(1)连接并访问数据库 6/29 项目目录结构有所调整 6/28 项目原型前期实现任务确定 C# 2.0 除了泛型 C# 2.0 泛型
7/3 原型编码阶段: (4) GridView的编辑更新
hulu · 2007-07-03 · via 博客园 - hulu

将员工列表gridview简化成只有两列:工号和姓名。
点击gridview智能标签【编辑列】添加一个HyperLinkField字段,设置相关属性:

HeaderText  员工资料
Text 点击查看详细资料
DataNavigateUrlField  realname,jobnum
DatanavigateUrlFormatString  ClerkDetail.aspx?realname={0}&jobnum={1}
DataTextField realname
DataTextFormatString 查看{0}的详细资料

创建ClerkDetail.aspx页
在页面中拖入sqlDataSource控件,在页面中拖入detailview控件,指定数据源为sqlDataSource1,点击sqlDataSource的SelectQuery属性,配置 命令和参数编辑器 对话框

运行后结果如下:

ClerkID 3
RealName 张大客
JobNum 3001
DeptID 3

如果SelectQuery用关联查询语句:select a.ClerkID,a.RealName,a.JobNum,b.DeptName from Clerk a,code_dept b where a.deptid=b.deptid and realname=@paraRealname and jobnum=@paraJobNum,则返回结果更为明白:

ClerkID 2
RealName 王公客
JobNum 1002
DeptName 公客部

以上的处理几乎没有编写任何程序代码,如何用代码来实现以上功能?
ClerkDetail.aspx也只有两个控件detailsview,sqldatasource,不做任何数据源绑定,编码如下:

using System.Web.Configuration;
using ..

public partial class ClerkDetail : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        
if (!IsPostBack)
        
{
            Session[
"sourceUrl"= Context.Request.UrlReferrer;//读取来源url
        }

        SqlDataSource1.ConnectionString 
= WebConfigurationManager.ConnectionStrings["CAROAConnectionString"].ConnectionString;
        SqlDataSource1.SelectCommand 
= "select * from clerk where realname=@paraRealName and jobnum = @paraJobNum";

        
//建立sql参数
        QueryStringParameter realNamePara = new QueryStringParameter("paraRealname", TypeCode.String, "realname");
        SqlDataSource1.SelectParameters.Add(realNamePara);

        QueryStringParameter jobNumPara 
= new QueryStringParameter("paraJobNum", TypeCode.String, "jobnum");
        SqlDataSource1.SelectParameters.Add(jobNumPara);

        DetailsView1.DataSourceID 
= SqlDataSource1.ID;

    }

}

如果想把两个gridview显示在一个页面中应该怎么办呢?
为了实现这一点,需要能取得第一个gridview的clerkID,并且将他传给第二个gridview
我们在第一个gridview中添加 选择按钮,用启用选择,并且在编辑列中将buttonType设成button
创建第二个gridview,创建第二个sqldatasource,并配置select语句的where选项,设置为:

点击添加,点击确定。
页面运行结果如下:

      
ClerkID RealName JobNum DeptID
1 陈公客 1001 1

我们看到SqlDataSource控件能够搭配 QueryStringPararmeter或者ControlParameter里面的参数来构造select语句,其实它还支持CookieParameter,FormParameter,ProfileParameter,SessionParameter等六个参数类型。
利用这个特性,我们增强ClerkList.aspx的功能,提供部门下拉列表选框,根据不同的部门选择来显示相关部门的员工列表。
首先增加数据源sqldsDeptList,部门下拉框DeptDropList,绑定数据源sqldsDeptList,并将其AutoPostBack设成True
数据源使用自定义select语句:SELECT DeptID, DeptName, ParentDeptID, AreaID FROM dbo.CODE_Dept WHERE (AreaID = 1)
增加SqlDataSource数据源sqldsClerkList,GridView员工列表ClerkGridView控件,配置sqldsClerkList的Where参数,选择DeptID来自DeptDropList控件。
运行结果如下:

要是我们要求在编辑模式下不能选择其他行,应该怎么办呢?
答案是在选择行的事件上判断当前是否是编辑模式,如果是就选定行。代码如下:

    protected void ClerkGridView_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    
{
        
//判断当前是否处于编辑模式
        if (ClerkGridView.EditIndex != -1)
        
{
            ClerkGridView.SelectedIndex 
= -1;
            e.Cancel 
= true;
            Literal txtMsg 
= new Literal();
            txtMsg.Text 
= "<script>alert('编辑模式下禁止换行');</script>";
            Page.Controls.Add(txtMsg);
        }

    }

用gridview来编辑记录其实并不实用,很多情况下,表格比较复杂,字段比较多,有些字段还需要限制输入,这时候就必须使用到DataList,Repeater或者是DetailsView,FormView等控件了。其中用的最多的就是FormView,因为它是完全模板搭建的,有更强的自定义表单功能,就利用他来实现员工信息编辑吧。

看看以前学习的历史,无不是使用拖放控件,绑定数据源,偶尔加点自定义模板,和事件处理代码,虽然编码量很少,但是总觉得不能随心所欲,而且看到clerklist.aspx的源码,充满了系统生成的对各个控件的参数,前台页面不够简洁。而却比如要实现以下的界面,单单靠几个拖放,总不能完全实现,而且对于数据源控件的一点点改动都会导致相应绑定的显示控件的刷新和一些架构的丢失,然后再运行页面就可能出错了,总不如自己写后台代码来的可靠。那么我们就以下面的界面为目标,真正掌握Asp.NET2.0中ADO.NET的代码编写吧!