星星之约

一位学生转向一位工作者
 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿(2)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案

  • 2006年12月 (7)
  • 2006年11月 (6)
  • 2006年10月 (2)

小鸟

  • 小鸟 (rss)
  • http://hi.baidu.com/lzytest/
  • 李俊平 (rss)

李俊平

搜索

  •  

最新评论

  • 1. re: VB.NET读写INI配置文件[未登录]
  • 实用!学习了!
  • --aa
  • 2. re: 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用
  • 比较复杂,我记得没有这么复杂的,GRIDVIEW有自带的分页。
  • --Wuylx
  • 3. re: VB.NET读写INI配置文件[未登录]
  • 靠,,这么久不写日志,,投诉你啊。。
  • --小鸟
  • 4. re: Java实现类MSN、QQ好友上线通知界面
  • very good!
  • --许欢
  • 5. re: 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用
  • 不懂。。。
  • --GG

阅读排行榜

  • 1. VB.NET读写INI配置文件(6113)
  • 2. 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用 (1961)
  • 3. 一次编辑 GridView 的所有行(766)
  • 4. struts、spring、hibernate等框架的整合培训日记 (711)
  • 5. 今天第一天上班...(622)

评论排行榜

  • 1. 今天第一天上班...(4)
  • 2. 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用 (2)
  • 3. VB.NET读写INI配置文件(2)
  • 4. Java实现类MSN、QQ好友上线通知界面 (1)
  • 5. 关于datagrid的几点简单应用 (0)

Powered by: 博客园
模板提供:沪江博客
BlogJava | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

2006年11月21日

VB.NET读写INI配置文件

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim path As String
        path = Application.StartupPath + "\Send.ini"
        TextBox1.Text = GetINI("Send", "Send1", "", path)
        TextBox2.Text = GetINI("Send", "Send2", "", path)
        Dim IsSms As Integer = GetINI("Send", "IsSms", "", path)
        If (IsSms = 1) Then
            Me.RadioButton1.Checked = True
        ElseIf (IsSms = 0) Then
            Me.RadioButton2.Checked = True
        End If

    End Sub
    Public Function GetINI(ByVal Section As String, ByVal AppName As String, ByVal lpDefault As String, ByVal FileName As String) As String
        Dim Str As String = LSet(Str, 256)
        GetPrivateProfileString(Section, AppName, lpDefault, Str, Len(Str), FileName)
        Return Microsoft.VisualBasic.Left(Str, InStr(Str, Chr(0)) - 1)
    End Function
    Public Function WriteINI(ByVal Section As String, ByVal AppName As String, ByVal lpDefault As String, ByVal FileName As String) As Long
        WriteINI = WritePrivateProfileString(Section, AppName, lpDefault, FileName)
    End Function
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Int32, ByVal lpFileName As String) As Int32
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Int32

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Dim path As String
            path = Application.StartupPath + "\Send.ini"
            WriteINI("Send", "Send1", TextBox1.Text, path)
            WriteINI("Send", "Send2", TextBox2.Text, path)
            If (Me.RadioButton1.Checked = True) Then
                WriteINI("Send", "IsSms", 1, path)
            ElseIf (Me.RadioButton2.Checked = True) Then
                WriteINI("Send", "IsSms", 0, path)

            End If
            MsgBox("配置设置已经成功!!!!")


        Catch ex As Exception
            MsgBox("错误!!!!")
        End Try

    End Sub

posted @ 2006-12-26 15:19 星星 阅读(6113) | 评论 (2) | 编辑 收藏
 
AJAX实现web页面中级联菜单的设计

看了大峡搞的级联菜单,我也班门弄斧一把,嘿嘿,花了一点时间搞了个级联菜单贴上来看看。本例中只要你选择成员分类名称就会自动显示成员名称: 首先在eclipse中建一个项目,名称你自己做主了,这里为Easyjf-menu,对应的浏览器页面代码为: Easyjf-menu.jsp

看了大峡搞的级联菜单,我也班门弄斧一把,嘿嘿,花了一点时间搞了个级联菜单贴上来看看。本例中只要你选择成员分类名称就会自动显示成员名称:
   首先在eclipse中建一个项目,名称你自己做主了,这里为Easyjf-menu,对应的浏览器页面代码为:
 Easyjf-menu.jsp
 <@page contentType=”text/html;charser=UTF-8” language=”java”%>
 <head>
   ……..
 </head>
 <script language=”javascript”>
   var XMLHttpReq;
   var currentSort;
   //创建xmlhttprequset对象
   function createXMLHttpRequest(){
   if(window.XMLHttpRequest){
   XMLHttpReq=new XMLHttpRequest();
 }
else if (window.ActiveXObject){
  try{
     XMlHttpReq=new ActiveXObject(“Msxml2.XMLHTTP”);
    }catch(e){}
       try{
 XMLHttpRequest=new ActiveXObject(“Microsoft.XMLHTTP”);
}catch(e){}
}
}
//发送请求函数
function sendRequest(url){
 createXMLHttpRequest();
 XMLHttpReq.open(“GET”,url,true);
 XMLHttpReq.onreadystatechange=processResponse;
 XMLHttpReq.send(null);
}
//处理返回信息函数
function processResponse(){
   if(XMLHttpRequest.readyState==4){
   if(XMLHttpRequest.status==200){
 updateMenu();
}else{alert(“您请求的页面有异常!”)}
}
}
//更新菜单函数
function updateMenu(){
 var res=XMLHttpReq.responseXML.getElementIdByTagName(“res”);
 var sunMenu=””;
 for(var i=0;i<res.length;i++){
 submenu=subMenu+res[1].fistChild.data+”<br>”;
}
currentSort.innerHTML=submenu;
}
//创建级联菜单
function showSubMenu(obj){
   currentSort=document.getElementById(obj);
   currentSort.parentNode.style.display=””;
   sendRequest(“menu?sort=”+obj);
}
</script>
<b>EasyJF成员</b>
<a onClick=”onShowSubMenu(‘大峡’)”>大峡</a>
, 该页面中提供了对应的菜单以供用户选择,用户选择菜单后,调用 showSubMenu(‘XXX’) 函数,其中参数用于传递用户所选菜单的标识信息到服务器以决定获取服务器的哪个在菜单内容,首先获得菜单的识别信息,再提交给 Ajax, 这里用 innerHTML 属性实现定位显示!

posted @ 2006-12-15 14:09 星星 阅读(294) | 评论 (0) | 编辑 收藏
 
一次编辑 GridView 的所有行

在平时的实际项目中,为了减少往返提交数据,可以一次编辑 GridView 的所有行,这样大大提高用户使用产品的体验。下面就讲解何一次编辑 GridView 的所有数据行。在下面的例子中,数据库使用《ASP.NET 2.0应用开发技术》一书中Site\App_Data\下的 ASPNET20Book.mdb 数据库。例子中的数据更新方式使用 SqlDataSource 数据源控件的UpdateCommand属性,但此方法同样适用于存储过程,SQL 语句等。

C# 

<% @ Page Language = " C# "  Debug = " true "   %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< script  runat ="server" >
string[] ClassNameArray 
=  {  " 大学 " ,  " 中学 " ,  " 高中 "  };

// 初始化原来的值
protected  void  GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{    
  
if  (e.Row.RowType  ==  DataControlRowType.DataRow)
  {
    System.Data.DataRowView drv 
=  (System.Data.DataRowView)e.Row.DataItem;
    RadioButtonList rbl 
=  (RadioButtonList)e.Row.FindControl( " txtGender " );
    
if  (rbl  !=   null )
    {
      
if  ((bool)drv[ " Gender " ])
      {
        rbl.Items.FindByText(
" 男 " ).Selected  =   true ;
      }
      
else
      {
        rbl.Items.FindByText(
" 女 " ).Selected  =   true ;
      }
    }

    DropDownList ddl 
=  (DropDownList)e.Row.FindControl( " txtClassName " );
    
if  (ddl  !=   null )
    {
      ddl.Items.FindByText(drv[
" ClassName " ].ToString()).Selected  =   true ;
    }
  }
}

//  初始化项目列表
protected  void  GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{    
  
if  (e.Row.RowType  ==  DataControlRowType.DataRow)
  {
    DropDownList ddl 
=  (DropDownList)e.Row.FindControl( " txtClassName " );
    ddl.DataSource 
=  ClassNameArray;
    ddl.DataBind();
  }
}

// 处理提交的数据
protected  void  XianhuiMeng_Click(object sender, EventArgs e)
{
  foreach (GridViewRow gvr 
in  GridView1.Rows)
  {
    string tGender 
=  ((RadioButtonList)gvr.FindControl( " txtGender " )).SelectedValue;
    SqlDataSource1.UpdateParameters.Add(
new  Parameter( " @Title " , TypeCode.String, ((TextBox)gvr.FindControl( " txtTitle " )).Text));
    SqlDataSource1.UpdateParameters.Add(
new  Parameter( " @Gender " , TypeCode.Boolean, (tGender  ==   " 男 "   ?   " True "  :  " False " )));
    SqlDataSource1.UpdateParameters.Add(
new  Parameter( " @ClassName " , 
                   TypeCode.String, ((DropDownList)gvr.FindControl(
" txtClassName " )).SelectedValue));
    SqlDataSource1.UpdateParameters.Add(
new  Parameter( " @id " , TypeCode.Int32, GridView1.DataKeys[gvr.DataItemIndex].Value.ToString()));
    SqlDataSource1.Update();
    SqlDataSource1.UpdateParameters.Clear();
  }
  Response.Redirect(Request.UrlReferrer.ToString());
}
</ script >

< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  id ="Head1"  runat ="server" >
< title > 同时编辑 GridView的 多行 </ title >
</ head >
< body >
< form  id ="form1"  runat ="server" >
  
< asp:GridView  ID ="GridView1"  runat ="server"  Font-Size ="12px"  CellPadding ="3"  AutoGenerateColumns ="False"
    DataKeyNames
="id"  DataSourceID ="SqlDataSource1"  OnRowDataBound ="GridView1_RowDataBound"
    OnRowCreated
="GridView1_RowCreated" >
    
< HeaderStyle  BackColor ="#EDEDED"   />
    
< Columns >
      
< asp:TemplateField  HeaderText ="姓名" >
        
< ItemTemplate >
          
< asp:TextBox  ID ="txtTitle"  runat ="server"  Text ='<%#Eval("Title")  % > '> </ asp:TextBox >
        
</ ItemTemplate >
      
</ asp:TemplateField >
      
< asp:TemplateField  HeaderText ="性别" >
        
< ItemTemplate >
          
< asp:RadioButtonList  ID ="txtGender"  runat ="server"  RepeatColumns ="2" >
            
< asp:ListItem  Text ='男' ></ asp:ListItem >
            
< asp:ListItem  Text ='女' ></ asp:ListItem >
          
</ asp:RadioButtonList >
        
</ ItemTemplate >
      
</ asp:TemplateField >
      
< asp:TemplateField  HeaderText ="学历" >
        
< ItemTemplate >
          
< asp:DropDownList  ID ="txtClassName"  runat ="server" >
          
</ asp:DropDownList >
        
</ ItemTemplate >
      
</ asp:TemplateField >
    
</ Columns >
  
</ asp:GridView >
  
< asp:SqlDataSource  ID ="SqlDataSource1"  runat ="server"  
    ConnectionString
="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|ASPNET20Book.mdb;Persist Security Info=True"
    ProviderName
="System.Data.OleDb"  SelectCommand ="SELECT * FROM [Student]"  
    UpdateCommand
="Update [Student] Set Title = @Title,Gender = @Gender,ClassName=@ClassName Where id=@id" >
  
</ asp:SqlDataSource >
  
< asp:Button  ID ="Button1"  runat ="server"  Text ="保存所有修改"  OnClick ="XianhuiMeng_Click"   />
</ form >
</ body >
</ html >

注意:对于SQL Server 数据库,参数名字不加@。另外注意:不同数据库类型和不同的数据源,UpdateCommand="Update [Student] Set Title = @Title,Gender = @Gender,ClassName=@ClassName Where id=@id"写法和SqlDataSource1.UpdateParameters.Add(new Parameter("@Title", TypeCode.String, ((TextBox)gvr.FindControl("txtTitle")).Text)); 的写法会有所区别。

posted @ 2006-12-15 14:06 星星 阅读(766) | 评论 (0) | 编辑 收藏
 
ASP.NET 2.0中将 GridView 导出到 Excel 文件中
     摘要: 下面代码实现将 GridView 导出到 Excel文件中。 值得注意的是VerifyRenderingInServerForm重载方法:  MSDN上的 VerifyRenderingInServerForm 方法的描述:  必须位于 <form runat=server> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息。发送回或依赖于注册的脚本块的...  阅读全文
posted @ 2006-12-15 14:05 星星 阅读(358) | 评论 (0) | 编辑 收藏
 
struts、spring、hibernate等框架的整合培训日记

facade模式:就是中关村攒机者的角色,他负责与多个零件供销商交互并将这些零件组装起来交给最终客户。
struts与spring集成的两种方式:
第一种是在struts的Action的execute方法中调用spring的applicationContext去获得Manager对象,这里的Action自身没有用到spring的思想,Action无法作为Spring中的JavaBean进行配置,相应代码如下:
      ServletContext application = this.getServlet().getServletContext();
      WebApplicationContext wapp = (WebApplicationContext)WebApplicationContextUtils.getWebApplicationContext(application);
     //WebApplicationContext wapp = (WebApplicationContext)application.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
     StudentManager studentManager = (StudentManager)wapp.getBean("studentManager");
  另外,spring为集成struts而提供了一个ContextLoaderPlugIn插件,其作用在于:创建一个ApplicationContext对象,并将这个对象存储在ServletContext中,以后在ActionSupport中就可以调用getWebApplicationContext来获得这个ApplicationContext对象了,这并没有让我感觉有多大的好处,示例代码如下:
    Enumeration e = application.getAttributeNames();
    while(e.hasMoreElements())
    {
        String attributeName = (String)e.nextElement();
        String objClassName = application.getAttribute(attributeName).getClass().getName();
        try
        {
           response.getWriter().println(attributeName + ":" + objClassName + "<br>");
        }catch(Exception ex){}
    }
    StudentManager studentManager = this.getWebApplicationContext().getBean("studentManager"));

第二种是将struts的Action作为spring的一个JavaBean进行配置,在Action里面只需要定义一个Manager变量和相应的setter/getter方法,就可以通过spring为其注入一个Manager对象。这种方式太复杂,很牵强,个人觉得没有什么实际意义,建议大家不必花费时间去学习。

spring与hibernate整合的原理:
class MyController extend simpleformcontroller
{
 public MyController()
 {
  setCommandClass(Studnet.class);
 }
}
首先回忆使用hibernate的步骤:
1.创建和配置Configuration对象,配置Congiuration对象可以通过hibernate.properties或hiberate.cfg.xml文件,也可以完全采用如下的编程方式:
      configuration = new Configuration()
      configuration.addClass(Student.class)
             //.addFile("Student.hbm.xml")
             //.addResource("/Student.hbm.xml")
             .setProperty("show_sql","true");
2.由configuration创建出SessionFactory对象:            
    SessionFactory sf = configuration.buildSessionFactory();
3.通过SessionFactory获得session对象,然后进行CRUD操作:
    Session session = sf.openSession();
    session.save()\delete\update\load\
    session.close();
使用spring集成hibernate的第一步就是借助spring的配置创建出SessionFactory对象
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
 <property name="mappingResource?>
  <list>
   <value>xx.hbm.xml</value>
   <value>yyy.hbm.xml</value>
  <list>
 </Property>
 <property name="hibernateProperties">
  <props>
   <prop key="show_sql">true</prop>
  <props>
 </property>
 <property name="datasource"><ref locale=""/></property>
</bean>
在LocalSessionFactoryBean内部完全采用编程方式来配置configuration对象,而不再通过hibernate.properties或hiberate.cfg.xml配置文件,带着大家查看了LocalSessionFactoryBean的源代码。
有了SessionFactory,我们接着就可以通过spring将这个SessionFactory注入到DAO类中,配置如下:
<bean id="studentDAO" class="cn.itcast.StudentDAO">
 <property name="sessionFactory">
  <ref bean="sessionFactory" />
 </property>
</bean>
相应的调用程序代码示意如下:
class StudentDAO
{
 sessionFactroy;
 void setSessionFactory(sessionFactory)
 {
  this.sessionFactory = sessionFactory;
 }
 insert(User user)
 {
  sessionFactory.openSession();//累
  session.save(user);
  session.close();//累
 }
}
我们还有自己openSession和getSession,这是不是很累呢?为此,spring又提供了一个配置类hibernateTemplate,它可以帮助我们去openSession和closeSession,这个配置类能够openSession,显然它一定要有SessionFactory的引用。
<bean id="hibernateTemplate" class="HibernateTemplate">
 <property name="sessionFactory">
  <ref bean="sessionFactory" />
 </property>
</bean>
遵循spring的IOC思想,我们接着还要将HibernateTemplate注入到DAO类中,配置如下:
<bean id="studentDAO" class="cn.itcast.StudentDAO">
 <property name="hibernateTemplate">
  <ref bean="hibernateTemplate" />
 </property>
</bean>

class StudentDAO
{
 hibernateTemplate;
 void sethibernateTemplate(hibernateTemplate)
 {
  this.hibernateTemplate = hibernateTemplate;
 }
 insert(User user)
 {
  hibernateTemplate.save(user);//我们不再openSession和closeSession,不是很爽吗?
 }
}

另外,spring还提供了一个HibernateSuport类,它可以通过注入的SessionFactory返回一个HibernateTemplate,我们的DAO类继承这个HibernateSupport,也可以获得HibernateTemplate对象进行CRUD操作,配置及示意代码如下:
<bean id="studentDAO" class="cn.itcast.StudentDAO">
 <property name="sessionFactory">
  <ref bean="sessionFactory" />
 </property>
</bean>
class StudentDAO extends HibernateSuport
{
 /*hibernateTemplate;
 void gethibernateTemplate()
 {
  return hibernateTemplate;
 }
 sessionFactroy;
 void setSessionFactory(sessionFactory)
 {
  this.sessionFactory = sessionFactory;
  hibernateTemplate = new HibernateTemplate(sessionFactory);
 }*/
 
 
 insert(User user)
 {

  getHibernateTemplate().save(user);
 }
}

 

最后由王泽佑提问引出spring mvc的注册绑定的详细讲解:
在spring帮助文档中搜索editor,可以看到有关注册绑定的信息,CustomDateEditor是没有被自动注册的,需要用户在initBinder方法内部调用,示例代码如下:
protected void initBinder(
        HttpServletRequest request,
        ServletRequestDataBinder binder)
        throws ServletException {
        binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy/MM/dd"),true));
    }
一种替换的方式及registerCustomEditor底层的实现内幕:
调用BaseCommandController.setPropertyEditorRegistrars()方法,显然这可以作为controller的属性进行配置。
class MyPropertyEditorRegistrar
{
 void registerCustomEditors(PropertyEditorRegistry registry)
 {
  reguistry.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
 }
}

关于Date数据校验的问题:通过在struts帮助文挡的Validator帮助页面中搜索validate,是可以搜索到DateValidator的配置帮助的。

如果注册了DateEditor,数据成功转换成Date类型的字段,那么随后的的Validator框架就没必要对这个Date字段进行校验了,因为Validator是对已装配到Bean中的字符串类型的字段进行校验,而数据都已经成功装配进了Date字段中,哪还有校验的必要。框架把数据装配到formbean里面,Validator从Formbean里面拿数据进行校验。


<bean id="myController class="cn.itcast.MyController">
 <property key="commandClass">
  <value>cn.itcast.Student</value>
 </prperty>
</bean>
上面的配置信息相当于下面的一段代码,这其中就涉及到了属性绑定的问题,要把字符串"cn.itcast.Student"转换成Class对象。
Class clazz = Class.forName("cn.itcast.Student");
setCommandClass(clazz);

小记:通过spring配置文件中的<import>元素的resource属性可以导入更多的配置文件,实现信息分散配置的目的。 

posted @ 2006-12-15 14:04 星星 阅读(711) | 评论 (0) | 编辑 收藏
 
利用GridView显示主细表并添加打开、关闭功能的扩展。

有网友在论坛上询问:如何在使用GridView显示主细表时添加删除功能?其实,如果单个GridView能够实现删除对话,N个GridView嵌套也没有任何问题。下面就将例子粘贴如下,望各位需要的朋友仔细揣摩一下,道理很简单的:)

查看例子

aspx :

<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " Default2.aspx.cs "  Inherits = " Default2 "   %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  id ="Head1"  runat ="server" >
  
< title > 利用GridView显示主细表并添加打开、关闭功能 </ title >
  
< style  type ="text/css" >
  td,div,a 
{ font-size : 12px }
  
</ style >

  
< script  type ="text/javascript" >
  
// <![CDATA[
   function  ShowHidden(sid,ev)
  {
    ev 
=  ev  ||  window.event;
    
var  target  =  ev.target  ||  ev.srcElement;
    
var  oDiv  =  document.getElementById( " div "   +  sid);
    oDiv.style.display 
=  oDiv.style.display  ==   " none " ? " block " : " none " ;
    target.innerHTML 
=  oDiv.style.display  ==   " none " ? " 显示 " : " 隐藏 " ;
  }
  
// ]]>
   </ script >

</ head >
< body >
  
< form  id ="form1"  runat ="server" >
    
< asp:GridView  ID ="MasterGridView"  runat ="server"  AutoGenerateColumns ="false"  Width ="780px"
      BorderWidth
="1"  OnRowDataBound ="MasterGridView_RowDataBound"  DataKeyNames ="id"
      ShowHeader
="false" >
      
< Columns >
        
< asp:TemplateField >
          
< ItemTemplate >
            
< div  style ="width: 100%; padding: 2px; font-weight: bold; background-color: #DEDEDE;
              float: left"
>
              
< span  style ="float: left" > 栏目名称: <% # Eval ( " Title " )  %> </ span >< span  style ="float: right;
                color: Red; cursor: pointer"
 onclick ="ShowHidden('<%#Eval(" id") % > ',event)">隐藏 </ span ></ div >
            
< div  style ="background-color: #FFF; padding-left: 60px; clear: both"  id ="div<%#Eval(" id") % > ">
              
< asp:GridView  ID ="DetailGridView"  runat ="server"  AutoGenerateColumns ="false"  ShowHeader ="true"
                HorizontalAlign
="left"  DataKeyNames ="id"  AutoGenerateDeleteButton ="true"  OnRowCommand ="DetailGridView_RowCommand"
                OnRowDeleting
="DetailGridView_RowDeleting"  Width ="720px" >
                
< HeaderStyle  BackColor ="#9999FF"   />
                
< Columns >
                  
< asp:TemplateField  HeaderText ="文章名称"  HeaderStyle-Width ="540px" >
                    
< ItemTemplate >
                      
< a  href ="/article/<%#Eval(" objectGuid") % > /read.aspx">
                        
<% # Eval ( " Title " )  %>
                      
</ a > [ <% #  Eval ( " HitCount " )  %> ]
                    
</ ItemTemplate >
                  
</ asp:TemplateField >
                  
< asp:BoundField  HeaderText ="发布日期"  DataField ="CreateDate"  HtmlEncode ="false"  DataFormatString ="{0:yyyy年MM月dd日}"
                    HeaderStyle-Width
="100px"  ItemStyle-HorizontalAlign ="Center"   />
                  
< asp:CommandField  DeleteText ="删除"  ShowDeleteButton ="true"  ButtonType ="Button"  HeaderStyle-Width ="40px"   />
                
</ Columns >
              
</ asp:GridView >
            
</ div >
          
</ ItemTemplate >
        
</ asp:TemplateField >
      
</ Columns >
    
</ asp:GridView >
  
</ form >
</ body >
</ html >

 

C#:

using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Data.OleDb;
using  System.Web.UI.HtmlControls;

public   partial   class  Default2 : System.Web.UI.Page
{
  
string  ConnectionString  =   @" Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|aspxWeb.mdb;Persist Security Info=True " ;
  OleDbConnection cn1;


  
protected   void  Page_Load(  object  sender, EventArgs e )
  {
    
if  ( ! Page.IsPostBack)
    {
      OleDbConnection cn 
=   new  OleDbConnection(ConnectionString);
      cn.Open();
      cn1 
=   new  OleDbConnection(ConnectionString);
      cn1.Open();
      OleDbCommand cmd 
=   new  OleDbCommand( " select * from [Subject] " , cn);
      OleDbDataReader dr 
=  cmd.ExecuteReader(CommandBehavior.CloseConnection);
      MasterGridView.DataSource 
=  dr;
      MasterGridView.DataBind();
      dr.Close();
      cmd.Dispose();
      cn.Dispose();
      cn1.Dispose();
      cn 
=  cn1  =   null ;
    }
  }
  
protected   void  MasterGridView_RowDataBound(  object  sender, GridViewRowEventArgs e )
  {
    
if  (e.Row.RowType  ==  DataControlRowType.DataRow)
    {

      GridView oGridView 
=  (GridView)e.Row.FindControl( " DetailGridView " );
      
if  (oGridView  !=   null )
      {
        OleDbCommand cmd 
=   new  OleDbCommand( " select top 10 * from Document Where pid =  "   +  MasterGridView.DataKeys[e.Row.RowIndex].Value, cn1);
        OleDbDataReader dr1 
=  cmd.ExecuteReader();
        oGridView.DataSource 
=  dr1;
        oGridView.DataBind();
        dr1.Close();
        cmd.Dispose();
      }
    }
  }

  
protected   void  DetailGridView_RowDeleting(  object  sender, GridViewDeleteEventArgs e )
  {
    GridView a 
=  (GridView)sender;
    Response.Write(
" 您要删除的记录是:<font color='red'> "   +  a.DataKeys[e.RowIndex].Value.ToString()  +   " </font>&nbsp;&nbsp;&nbsp;&nbsp;TODO:执行删除动作 " );
    
//  TODO:执行删除动作
  }
  
protected   void  DetailGridView_RowCommand(  object  sender, GridViewCommandEventArgs e )
  {

  }
}

注意:EnableViewState="true" 是必须的。

posted @ 2006-12-15 14:02 星星 阅读(392) | 评论 (0) | 编辑 收藏
 
ASP.NET 2.0中合并 GridView 的表头单元格
     摘要: 在实际工作中,往往需要合并表格头部的单元格,下面就是一个实现的例子。运行结果如图: C# <% ... @ Page Language = " C# ...  阅读全文
posted @ 2006-12-15 14:00 星星 阅读(393) | 评论 (0) | 编辑 收藏
 
[转自李老师的博客]我很欣慰
今天看了两个学生的博客,李曾鹰和邱新兴的。很勤奋的两个学生,也很努力。正走着十几年前我曾走过的路,满怀希望和憧憬。祝福他们!也想呼吁所有的学软件的同学:热爱技术吧,它也会爱你们的。
         也许是因为身在学校的缘故吧,竟然让我这个年逾三十已久的老人还能在这里谈技术。这也许也算是我能安心在这个并不肥沃的土地上依然耕耘不辍的原因之一吧。象牙塔里的技术毕竟纯粹,没有杂质,满足自己十几年的虚荣,可以幼稚地以为还停留在那个“程序员英雄”的时代。
         逝者如斯夫!

转自:http://www.cnblogs.com/jplee/archive/2006/11/13/559612.html

posted @ 2006-11-21 22:03 星星 阅读(264) | 评论 (0) | 编辑 收藏