========== 我的简历 ==========
<2009年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

      技术文章分类

      最新技术文章
 
发表文章    广东程序员人才招聘网    注册    登陆   

在DataGrid中创建一个弹出式窗口

发表日期:2007-9-23 0:00:00 人气:132



  这篇文章来自DotNetJunkie的提议。他最初写信要求我们提供一个关于如何创建在DataGrid
中使用HyperLinkColumn的例子,可以在用户点击这一列后打开一个新窗口,显示出此列的详细内容。在此之前我们曾经通过email回答他们,他建议我们将这个方法加入他们的指南中,于是,就有了这篇文章。像我们原来的文章一样,它很简单,但是简单的包含代码的方法例可以更有效地启发开发者。
  这个例子包含两个WebForms和一个css文件(所有的代码都可以下载)--第一个WebForm包含一个展示从Northwind库中读出的产品列表的DataGrid,hyperlink的states设为“SeeDetails”,一旦这个链接被点击,JavaScript片段
Window.Open方法就会被调用.用户想获得的关于产品的ProductID做为参数包含在URL中.包含另一个DataGrid的第二个Webforms向用户列示他选中产品的所有具体细节。让我们来看一下datagrid-open.aspx和datagrid-open.aspx.cs
datagrid-open.aspx
<%@
Page language="c#" Codebehind="datagrid-open.aspx.cs"
AutoEventWireup="false" Inherits="study.datagrid_open"
%>
<HTML>
<HEAD>
<title>datagrid-open</title>
<meta
name="GENERATOR" Content="Microsoft Visual Studio
7.0">
<meta name="CODE_LANGUAGE"
Content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content=" href="http://schemas.microsoft.com/intellisense/ie5">http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<center>
<form
runat="server" ID="Form1">
<asp:datagrid
id="DataGrid1" runat="server" Font-Size="12"
AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn
DataField="ProductID" HeaderText="Product ID"
HeaderStyle-CssClass="HEADERSTYLE"
ItemStyle-CssClass="ITEMSTYLEDEFAULT"
/>
<asp:BoundColumn DataField="ProductName"
HeaderText="Product Name" HeaderStyle-CssClass="HEADERSTYLE"
ItemStyle-CssClass="ITEMSTYLEDEFAULT"
/>
<asp:hyperlinkcolumn DataTextFormatString="Show
Details..." DataTextField="ProductID"
DataNavigateUrlField="ProductID"
DataNavigateUrlFormatString="javascript:var win =
window.open("datagrid-show.aspx?ProductID={0}",null,"width=700,height=200");"
HeaderText="See Details" HeaderStyle-CssClass="HEADERSTYLE"
ItemStyle-CssClass="ITEMSTYLEHYPERLINK"
/>
</Columns>
</asp:datagrid>
</form>
</center>
</body>
</HTML>

datagrid-open.aspx.cs
using
System;
using System.Collections;
using
System.ComponentModel;
using System.Data;
using
System.Drawing;
using System.Web;
using
System.Web.SessionState;
using System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.HtmlControls;
using
System.Data.SqlClient;
namespace study
{
 ///
<summary>
 /// datagrid_open 的摘要说明。
 ///
</summary>
 public class datagrid_open :
System.Web.UI.Page
 {
  protected
System.Web.UI.WebControls.DataGrid
DataGrid1;
  protected
System.Web.UI.HtmlControls.HtmlForm
Form1; 
  #region User Defined
Code
  private void Page_Load(object sender,
System.EventArgs
e)
 {  
   if ( !
this.IsPostBack )

    this.BindData();
  }



  protected void
BindData()
  {   
   SqlCommand
cmd = new SqlCommand( "SELECT TOP 10 ProductID, ProductName
FROM Products", con("Server=dwserver; DataBase=Northwind; User
Id=sa;
Password=123456"));  
   this.DataGrid1.DataSource
=
cmd.ExecuteReader(CommandBehavior.CloseConnection);
   this.DataGrid1.DataBind();  
  }  
  protected
SqlConnection con(System.String ConnectionString
)
  {   
   SqlConnection
c = new SqlConnection( ConnectionString
);
   c.Open();
   return
c;  
  }
  #endregion



  #region Web Form Designer generated
code
  override protected void OnInit(EventArgs
e)
  {
   //
   //
CODEGEN:该调用是 ASP.NET Web
窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }  
  ///
<summary>
  /// 设计器支持所需的方法 -
不要使用代码编辑器修改
  /// 此方法的内容。
  ///
</summary>
  private void
InitializeComponent()
  {   

   this.Load += new
System.EventHandler(this.Page_Load);
  }
  #endregion
 }
}

  除了DataNavigateUrlFormatString外确实没什么困难的,你可以注意到我实际上直接使用了一个javascript片段(注:你也可以简单地创建一个.js文件或在WebForm中使用<script></script>),javascript如此普及,所以这里不再详细讲解。功能上,它打开一个新的窗口,带ProductID查询字串的datagrid_show.aspx,ProductID的值来自我们的数据源。我们可以看这两个文件:

datagrid_show.aspx
<%@ Page language="c#"
Codebehind="datagrid-show.aspx.cs" AutoEventWireup="false"
Inherits="study.datagrid_show"
%>
<HTML>
<HEAD>
<title>datagrid-show</title>
<meta
name="GENERATOR" Content="Microsoft Visual Studio
7.0">
<meta name="CODE_LANGUAGE"
Content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content=" href="http://schemas.microsoft.com/intellisense/ie5">http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<P
align="left">
<asp:DataGrid
HeaderStyle-CssClass="HEADERSTYLE"
ItemStyle-CssClass="ITEMSTYLEDEFAULT" runat="server"
id="DataGrid1" Font-Size="8" Height="50"
Width="675"></asp:DataGrid></P>
<p
align="center">
<a
href="JavaScript:window.close()">close
window</a>
</p>
</body>
</HTML>

datagrid_show.aspx.cs
using
System;
using System.Collections;
using
System.ComponentModel;
using System.Data;
using
System.Drawing;
using System.Web;
using
System.Web.SessionState;
using System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.HtmlControls;
using
System.Data.SqlClient;
namespace study
{
 ///
<summary>
 /// datagrid_show 的摘要说明。
 ///
</summary>
 public class datagrid_show :
System.Web.UI.Page
 {
  protected
System.Web.UI.WebControls.DataGrid
DataGrid1; 
  #region User Defined
Code
  private void Page_Load(object sender,
System.EventArgs e)
  {
   if (
! this.IsPostBack )

    this.BindData();
  }



  protected void
BindData()
  {
   SqlCommand
cmd = new SqlCommand( "SELECT * FROM Products WHERE ProductID
= @ProductID", con("Server=dwserver; DataBase=Northwind; User
Id=sa;
Password=123456"));  
   cmd.Parameters.Add(new
SqlParameter("@ProductID", SqlDbType.VarChar,
200));
   cmd.Parameters["@ProductID"].Value
=
Request["ProductID"].ToString();
   this.DataGrid1.DataSource
=
cmd.ExecuteReader(CommandBehavior.CloseConnection);
   this.DataGrid1.DataBind();
  }  



  protected SqlConnection con(System.String
ConnectionString
)
  {   
   SqlConnection
c = new SqlConnection( ConnectionString
);
   c.Open();
   return
c;  
  }
  #endregion



  #region Web Form Designer generated
code
  override protected void OnInit(EventArgs
e)
  {
   //
   //
CODEGEN:该调用是 ASP.NET Web
窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }  
  ///
<summary>
  /// 设计器支持所需的方法 -
不要使用代码编辑器修改
  /// 此方法的内容。
  ///
</summary>
  private void
InitializeComponent()
  {   

   this.Load += new
System.EventHandler(this.Page_Load);
  }
  #endregion
 }
}



其实很简单的,朋友可以试试吧。